Кому нужно open source GPL3 и под линукс, то советую посмотреть в сторону 
http://www.chibios.org. 
Учтите что STM32 standard peripheral library не GPL! 
http://ru.wikipedia.org/wiki/STM32F10x_ ... ls_LibraryДля ubuntu компилятор берём тут 
https://launchpad.net/gcc-arm-embeddedпрошивать проще всего через SWD, под линукс есть st-link 
https://github.com/texane/stlinkSWD  есть на всех отладочных платах STM32 discovery.
он так же поддерживает отладку на процессоре.
Его же можно использовать и для прошивки внешних контроллеров  
http://microtechnics.ru/programmator-mi ... discovery/Так что под линукс, хотя бы одну плату STM32 discovery лучше купить, если конечно у вас нет подходящего J-Tag программатора.
Кому нужна полноценная IDE можно почитать как настроить Eclipse 
http://www.chibios.org/dokuwiki/doku.ph ... eclipse1&s[]=eclipse#installation
Я лично использую geany + консольный отладчик gdb.
Стоит отметить что chibios  не совместима с STM32 standard peripheral library , поэтому за основу,при программировании, лучше всего брать reference manual и документацию на chibios, а не примеры в интернете.
По примерам можно понять общую логику, но из за того что конфигурация регистров описывается разными структурами, перенести чужие примеры в chibios становится сложно.
Полезности для линукса:
Если процессор STM32 натыкается на некорректный указатель то он вываливается в hardfault обработчик, но gdb не понимает этого и в результате bt теряет историю.
Чтобы исправить это нужно в main.c добавить эти строчки.
- Код: Выделить всё • Развернуть
- void **HARDFAULT_PSP;
 register void *stack_pointer asm("sp");
 
 void HardFaultVector()
 {
 // Hijack the process stack pointer to make backtrace work
 asm("mrs %0, psp" : "=r"(HARDFAULT_PSP) : :);
 stack_pointer = HARDFAULT_PSP;
 while(1);
 }
 
источник 
http://koti.kapsi.fi/jpa/stuff/other/st ... trace.html