In my last post I talked a little about the process of picking an ARM microcontroller to start using. After doing some more research, I’ve decided for now to start using the STM32 line of chips. I don’t really know how it stands on the technical merits vs the other similar lines; the thing I’m looking at the most is suitability for hobbyist usage. It looks like Freescale is pursuing the hobbyist market more actively, but from what I can make out it looks like the STM32 line of chips has been around longer, gathered some initial adoption, and now there’s enough user-documentation to make it usable. A lot of the documentation is probably applicable to all Cortex-M3/M4’s, but it’s all written for the STM32’s and that’s what most people seem to be using. So I feel pretty good about going with the STM32 line for now — I’ll be sure to post once I make something with one.
Within the STM32 line, though, there are still a number of options; I’ve always been confused too why different chips within the same line are so non-portable with each other. Even within the same sub-line (ex STM32 F3) at the same speed and package, there will be multiple different chips as defined by having different datasheets. I also ran into this with the ATmegas — even though they’re “pin and software compatible”, there are still a number of breaking differences between the different chips! I guess I had always hoped that picking a microcontroller within a line would be like selecting a CPU for your computer: you select the performance/price tradeoff you want and just buy it. But with microcontrollers I guess there’s a bit more lock-in since you have to recompile things, change programmer settings, etc.
At first I was planning on going with a mid-range line of theirs, the STM32 F3, since that’s the cheapest Cortex-M4. Turns out that the different between Cortex-M3’s and M4’s is pretty small: M4’s contain more DSP functionality (multiplication and division operations), and an optional FPU (which is included in all STM32 M4’s). It looks like the F3 is targeted at “mixed signal applications”, since they have a bunch of ADCs including some high-precision SDADCs. I thought about moving down a line to the F1’s, which are cheaper M3’s that can have USB support, but in the end I decided to move up a line to their top-end F4’s. Even a 168MHz chip only ends up being about $11; a fair bit more than the $3 for an ATmega328P, but once you consider the total cost of a one-off project, I think it’ll end up being a pretty small expense.
My first intended use is to build a new JTAG adapter; my current one uses an ATmega328 and is limited to about 20KHz. My development platform project, which I keep on putting off finishing, uses a lot of CPLDs and will soon start using FPGAs as well, so JTAG programming time would be a nice thing to improve. Hopefully I’ll have something to post about in a few weeks!