# ARM Cortex (M3-M4): manufacturer and development IDE

I would like to do some MCU programming this summer and I've already had some unfortunate experiences with the STM32F4 DISCOVERY board, particularly the fact that it came without any (free) software which would allow unlimited use (more than the 16KB or 32KB from both Keil and IAR).

Currently I'm also planning on buying a few ATTiny and ATMegas for smaller projets, as well as an ISP programmer and a JTAG debugger. That would point me towards Atmel as far as costs & IDE are concerned.

I read a piece of this other discussion: ARM Cortex-M3 development tools? and I've seen that I tried something that had been pointed out there.

I used the CodeSourcery toolchain as well. Under GNU/Linux the only library that worked (for me) was Chibios. I setup Eclipse with the gnuarm plugin. Maybe I just didn't do it the right way (or maybe I didn't understand correctly what it is for). Also uploading the code (4KB) took like 5 minutes. It wasn't that bad, but debugging was very far from stable (lots of error messages that I should analyze as soon as I have time: for now that's a secondary problem).

I'd liked to try out Coocox but it didn't let me upload the code (I needed the hardware interface I suppose, their chap JTAG interface).

The question is therefore: is there any manufacturer that actually supply a software free to use without limitations on lines of code or size of code ? For now I only found Atmel which now includes support for both ARM and AVR in their Atmel Studio 6 based on Visual Studio 2010. ST and NXP don't seem to offer any. TI seem to offer their CCStudio[Code Composer Studio] but it also has a limitations on the maximal size of code that can be produced.

I'd have no problem in doing it in GNU/Linux (in fact I'd prefer to), but I would like it to be well supported under it.

I'm wondering if the other manufacters offer something more: the ARM architecture in itself (Cortex M3/M4 or others) should be pretty much standard. What differentiate one MCU from another are the peripherals around it, if I understood correctly (and I'm hoping some manufacter other than Atmel is actually providing some software along, which is not code-size limited)? I'd be particularly interested in high speed ADCs (and MCU's frequency as well), but I've seen on some catalogues that it doesn't change that much from one manufacturer to another.

Just a curiosity: if I want to send data from MCU to PC using serial communication (for instance, USB), does the MCU have to be VERY fast if I want to transfer data a full speed (say 480Mbit/s for instance needs what: 480MHz ?) ?

I'm open to suggestions. Thank you very much in advance.

• USB full-speed is 12 Mbit/s – m.Alin Jun 9 '12 at 19:16
• Wanted to say USB 2.0 (though it was logical). I'm not looking for USB 3.0 speeds [yet]. What about USB speed vs MCU speed? – user51166 Jun 9 '12 at 19:18
• Have you ever developed a project that exceeded the IAR compiler's 32 kB code size limitation? Or are you just having a feeling that your project might be bigger than that? – m.Alin Jun 9 '12 at 19:25
• Just a feeling. I'd rather not get to 31KB and suddenly add some code to it and at that point change of compiler, IDE and all of that stuff. – user51166 Jun 9 '12 at 19:26
• The ST arm parts work fine with GCC, and there are several open source projects around for talking to the $10 stlink (buggy V1 and better V2) eval boards (which you can use to programmer your own targets too) from linux or whatever. I'd say a 48K download takes maybe 10 seconds. The catch with using GCC is that you are going to have to take some time to translate code that you pick up from the manufacturer or elsewhere, mostly organizing the build system. – Chris Stratton Aug 9 '12 at 13:23 ## 5 Answers At the risk of sounding like a broken record... PSoC5 is your answer! (It's amazing how many times PSoC is the answer) The PSoC5 MCU has an ARM Cortex M3 core, and a bunch of other brilliant features that practically no other MCU has. Unlike other MCUs, setting up the peripherals is as fun as eating ice cream, and you can even create your own in Verilog! The IDE is pretty good, and totally free. The Development Kit is great, and full of features and comes with the programmer, which you can use for your future projects. It's not too expensive. • Do you mind clarifying the "and a bunch of other brilliant features that practically no other MCU has"? I see that the graphical editor for the hardware circuit might be useful (can you actually and easily create new parts if you need to ?). The developement kit is quite a bit too much expensive for what I'll be doing (just studying it a little bit doing some small projects). I'd liked something more in the 50$-100\$ range if possible. – user51166 Jun 9 '12 at 19:35
• @m.Alin: can you provide a better alternative if you think so? I agree that their development board is quite expensive and their MCUs are a bit more expensive than TIs, but I'd like to hear some (better) alternatives (if any). – user51166 Jun 9 '12 at 19:45
• @user51166 - The best feature is being able to connect any signal to any pin, simply by drawing it on the schematic. You can also connect together the basic components, gates, flip-flops etc. Depending on the device you choose, you can also have DACs, op amps, comparators. It's so useful to be able to make significant hardware changes simply by changing the firmware. This has got me out of trouble more than once. – Rocketmagnet Jun 9 '12 at 20:12
• @user51166 - The other great thing is that you have huge freedom over the peripherals you have. Want 32 PWM channels? 10 SPI ports? 5 quadrature decoders? Digital filters? Other MCUs try to provide a handful of peripherals they think might be useful to the average developer. PSoC gives you whatever you want. – Rocketmagnet Jun 9 '12 at 20:17
• Well lots of SPI ports may be useful sometimes (to avoid a multiplexer). I think I can buy myself some MCUs without problem. It's just that the development board costs so much! – user51166 Jun 9 '12 at 21:17

A platform that has free compiler/IDE comes to mind:

• mBed platform. It's based on a Cortex-M3 microcontrollers: NXP LPC1768. It has an online compiler/IDE. Programming language: C/C++

As a downside, the microcontroller has a preprogrammed bootloader which takes up some space in the program memmory. On the other side, you don't have to spend additional money to buy a programmer.

• I would've liked to have also minimal space used. Therefore a development board is ok for experimenting, but I'd like to move to a single MCU afterwards. – user51166 Jun 9 '12 at 21:19

Not sure why Maple dev boards are not that popular but they are very easy to use: LeafLabs
They pack an ARM Cortex-M3 running at 72MHz with many I/O and peripherals. Best of all, they are compatible with the Arduino IDE which makes them very easy to program. There is no limitation that I know of other than what the microcontroller itself is limited to. LeafLabs has ported the open source Arduino IDE such that it is specific to their dev boards.

You also have the option of NXP's mBed LPC1768, as pointed out by m.Alin. It also has an ARM Cortex-M3 running at 96MHz. I have used it before and it's quite powerful. It has an online IDE and compiler on their website which means you have to be connected to the internet if you want to code it and/or program the board. NXP also provides a very useful API and lots of reference code.

Try EM::Blocks. It is based on Code::Blocks and works great. I had test code that they have on the EMB site up and running on STM32F4Disco board in about 10 minutes including the instal and I'm a complete bonehead. There are no limits and has most of the features of Keil and supports all the current STM32Fxxx parts which CooCox doesn't. Don't waste your time with Eclipse.

I used mBed for prototyping and emBlocks in case I need to dig further - e.g. add offset to flash memory in case I make custom bootloader that will require my main program to be started at a certain offset.

I usually use STM32 Nucleo board which comes with STLink programmer to make quick prototypes. emBlocks also have nice debugger that support my favourite debugger the Segger JLink.

Using mBed, moving from the nucleo board to custom board is a breeze, simply connect the SWD interface from the STM32 Nucleo board, remove all the jumpers, and you can drag and drop binary files from computer to your custom board via the STLink. In case of mBlocks, you can use it programmer interface - it can detect the STLink.