Toto je starší verze dokumentu!
Obsah
Programování procesorů ARM STM32
Pro používání procesorů ARM je nejlepší pracovat v operačním systému Linux, proto následující návod popisuje instalaci a využití nástrojů pro práci s ARM v tomto systému. Postup instalace Linuxu.
Veškeré zde užité programové vybavení je dostupné zdarma.
Kompilátor
Jako volně dostupný kompilátor se může použít GNU C Compiler, dostupný v git repositáři gcc-arm-embedded.
Pro instalaci do Ubuntu je možné využít před připravené deb balíčky. PPA repositář zatím funguje pouze pro Ubuntu 12.04
Rychlá instalace pomocí depozitáře
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded sudo apt-get update sudo apt-get install gcc-arm-none-eabisudo
Postup kompilace
V terminálu je potřeba se nacházet ve složce, kde se nachází soubory potřebné pro kompilaci a následně stačí zadat příkaz MAKE
Programovací GUI
Sublime text
Code::Blocks
sudo apt-get install codeblocks
Knihovna
STM32F10X standard peripheral library
Úplná proprietární knihovna od STMicroelectronics, která však nemá příliš pohodlné programovací rozhraní a zabírá hodně prostoru ve výsledném programu.
Dostupná ke stažení na stránkách STMicroelectronics.
libopencm3
Nová open-source knihovna, prostorově úsporná a s lepším rozhraním, která je ale zatím neúplná (avšak pod aktivním vývojem).
Nahrávání
Bootloader
Užití bootloaderu je výhodné v případech, kdy nechceme používat žádný přídavný programovací hardware a nepotřebujeme pokročilé vývojové funkce, jako například debugger.
Modul STM32F10xRxT01A
Pro aktivaci bootloaderu držte tlačítko BOOT, zmáčkněte tlačítka RESET a poté hned pusťte tlačítko BOOT. S bootloaderem se může komunikovat přes USB nebo přes UART (např. programem stm32flash). Pro nahrávání firmware přes USB je vhodný program dfu-util, který existuje pro Linux, Mac OS i Windows.
Připojení modulu
Pro použití bootloaderu je třeba modul připojit na seriovou linku. V případě použití modulu USB232R01B stačí mít zapojené pouze RXD a TXD následovně:
USB232R01B | STM32F10xRxT01A |
---|---|
TXD | PA10 |
RXD | PA9 |
Ostatní signály DTR a RTS si na modulu zapojují profesionálové, kteří nechtějí mačkat tlačítka pří každém uploadu :) (Tato funkce vyžaduje upravený stm32flash, který se však asi podařilo ztratit)
Kompilace stm32flash
svn checkout http://stm32flash.googlecode.com/svn/trunk/ stm32flash-read-only cd stm32flash-read-only make sudo make install
Příklad použití:
sudo stm32flash /dev/ttyUSB0 stm32flash - http://stm32flash.googlecode.com/ Serial Config: 57600 8E1 Version : 0x20 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0418 (Connectivity line) RAM : 64KiB (4096b reserved by bootloader) Flash : 256KiB (sector size: 2x2048) Option RAM : 15b System RAM : 18KiB Resetting device... done.
Nahravani programu vypada napriklad takto:
$ ./stm32flash -w ./bin/LED_Blink.hex -v -g 0x0 /dev/ttyUSB0 stm32flash - http://stm32flash.googlecode.com/ Using Parser : Intel HEX Serial Config: 57600 8E1 Version : 0x22 Option 1 : 0x00 Option 2 : 0x00 Device ID : 0x0414 (High-density) RAM : 64KiB (512b reserved by bootloader) Flash : 512KiB (sector size: 2x2048) Option RAM : 15b System RAM : 2KiB Wrote and verified address 0x08000c48 (100.00%) Done. Starting execution at address 0x08000000... done.
dfu-util
Přeložené bináry této utility pro jednotlivé platformy naleznete zde: dfu-util
Pro aktivaci bootloaderu přes USB musíte připojit +3,3 V na nožičku PA9. Spuštění bootloaderu se provádí tlačítky: stiskni RESET, stiskni BOOT, pusť RESET, pusť BOOT.
Dávka pro volání dfu-util pro platformu Windows a přeložená verze dfu-util bez potřeby dalších knihoven je zde: dfu-util-static. Pod Windows je ještě nutné nainstalovat nějakou verzi usblib. To nejsnáze uděláte programem zadig. V průběhu instalace usblib musíte mít procesor v DFU módu (viz sekvenci tlačítek výše).
Příklad volání dfu-util:
dfu-util -d 0483:df11 -a 0 -D ./bin/blik.bin -s 0x8000000:leave
Popis parametrů příkazu
* **0483:df11** - identifikátor zařízení na USB (získáno přes lsusb) * **0x8000000:leave** - začátek flash paměti MCU.
Nahrání firmware si můžete vyzkoušet pomocí tohoto vzorového bináru, který z procesoru STM32F107 udělá USB HID myš, která opisuje kolečko: STM32F107_mouse.bin
J-TAG
K programování přes JTAG se potřebuje externí programátor. Na modulu STM32F10xRxT01A jsou JTAG dráty vyvedeny na zvláštním konektoru (J51). Jako externí programátor může být využit například modul JTAGFT2232V02A
Programovat lze např. otevřeným programem OpenOCD, který podporuje většinu používaných JTAG programátorů a umí vytvořit back-end pro GDB, takže podporuje i debugování.
OpenOCD má v Ubuntu sice nativně podporované balíčky, ale jejich verze je obvykle značně opožděna za současným vývojem. Proto je lepší si zkompilovat aktualní verzi..
sudo apt-get install libtool git gcc automake libftdi-dev texinfo git clone git://git.code.sf.net/p/openocd/code openocd-code cd openocd-code/ ./bootstrap ./configure --enable-maintainer-mode --disable-werror --enable-ft2232_libftdi make sudo make install
Tím máme v systému naistalováno OpenOCD. Pokud jej budeme chtít odinstalovat, použije se příkaz
sudo make uninstall
Pokud máme k počítači připojený modul JTAGFT2232V02A s nahraným schématem v FPGA, tak se můžeme připojit k nějakému ARMu.
sudo openocd -f "interface/busblaster.cfg" -f "target/stm32f1x.cfg" Open On-Chip Debugger 0.7.0-rc1-dev-00011-gd9ba56c (2013-04-28-11:46) Licensed under GNU GPL v2 For bug reports, read http://openocd.sourceforge.net/doc/doxygen/bugs.html Info : only one transport option; autoselect 'jtag' adapter speed: 1000 kHz adapter_nsrst_delay: 100 jtag_ntrst_delay: 100 cortex_m3 reset_config sysresetreq Info : max TCK change to: 30000 kHz Info : clock speed 1000 kHz Info : JTAG tap: stm32f1x.cpu tap/device found: 0x3ba00477 (mfg: 0x23b, part: 0xba00, ver: 0x3) Info : JTAG tap: stm32f1x.bs tap/device found: 0x16410041 (mfg: 0x020, part: 0x6410, ver: 0x1) Info : stm32f1x.cpu: hardware has 6 breakpoints, 4 watchpoints
OpenOCD teď vytvořilo server ke kterému se můžeme přípojit přes telnet
telnet localhost 4444 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. Open On-Chip Debugger >
RTOS
Chibios
Jde o základní relaltime operační systém s HAL zjednodušující práci s mikroprocesorem. Pro snazší práci byla vytvorena kofigurace Chibios přímo pro modul s ARM dostupná je na githubu
Další programová dokumentace je dostupná ChibiOS/RT
Demo blikání LED
#include <ch.h> #include <hal.h> int main(void) { halInit(); chSysInit(); while (TRUE) { palTogglePad(GPIOB, GPIOB_LED1); chThdSleepMilliseconds(250); } }