i was thinking time management wise, I see your point and think this is a good take.
thanks, i’m feeling encouraged. I’m going to do some research and perhaps pick a project to work towards, figure out the steps i’d need to make to achieve said project and go from there.
It is hard to give good advice over text and internet.
Today ARM is everywhere, but I would recommend to start with a 8bit AVR like the old Arduino UNO. (Especially if you have no embedded experience)
It is a lot easier to get an overview of that MCU than a big ARM core.
And anything you learn there you can use on a more complex MCU.
But try to not use too many external libs, use the datacheet instead. Learn how you setup and start the ADC. Learn how to configure timers. Learn Pwm and blinking leds by registers. Learn C and maybe some Assembly.
You can do alot of funky stuff with a 8bit mcu.
If you know this, then a faster chip will give you more of this faster and with nice things like DMA, but if just starting out, understanding 8bit mcu is a good foundation.
There’s a bunch of links and advice for getting started at the top of this thread. If you could say what you’re looking for that’s different from that, it would help.
I’ve been working on using the new microcontroller from raspberry pi, the RP2350, for audio DSP stuff. It’s not super powerful, the teensy 4.0 and STM32H7 are considerably faster, but it is very cheap and pretty easy to develop for. The latest This is Not Rocket Science module, Bopp and Steve, uses it, and it is an algorithmic reverb module. It’s probably not good enough for real intense stuff, but seems pretty good for smaller stuff like eurorack modules.
I’ve been enjoying going through the source code for the PreenFM2 and PreenFM3 (built around STM32F4xx and STM32F7xx MCUs, respectively).
Having experience with these synths probably helps a lot to make sense of everything. But even without, it’s interesting to see how full-featured projects like this are organized and come together.
Inspired by FMS, I started looking into the Game Boy Advance as a target for embedded mobile development. Turns out, is has a ton of great stuff going for it:
It’s built around an ARM7!
So if you have ARM knowledge, it applies.
And if you don’t, learning GBA development builds skills very applicable to modern embedded platforms.
And, it being a popular platform with mass appeal and thriving homebrew scene, its tutorial game is strong.
Peripherals are HOTTOGO. Gamepad. Buttons. LCD display. DAC. All prewired and standard.
Portability story is… somehow awesome?!
Every platform has a GBA emulator.
Most of these emulations are really accurate.
Wave of “retro gaming” hardware provides great experience without collecting “vintage” electronics.
Debugging experience vastly improved.
Yeah… all those emulators? They have debuggers attached.
Pull up memory with a click. Often with really useful visualizations.
No dongles, ribbon cables, or jlink needed.
Checking tweaks in an emulator is so much more convenient than flashing builds to hardware.
A sticking point for me right now is interrupts. Generally, I’m far enough along with ARM that I feel comfortable writing my own HAL. And I can stumble my way through the necessary CRT and ld script if pushed. But messing with interrupts has been a nightmare — mostly because it requires asm to jump from IRQ mode to user mode and back and this is, at least for me, extremely fraught and error-prone.
So question for @Ess, if you’re around: is there a particular project or library you used for interrupt handling with FMS? Are there some that you’ve found are most “modern” or most widely compatible? Are those even useful metrics with which to judge these things?
GBA is super fun to develop for – and it is indeed very well documented and uses a fairly standard ARM platform with just enough quirks to keep things interesting.