Uživatelské nástroje

Nástroje pro tento web


cs:arm_programming
no way to compare when less than two revisions

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.


Předchozí verze
Následující verze
cs:arm_programming [2013/11/08 13:00] – [Kompilátor] kaklik
Řádek 1: Řádek 1:
 +====== 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.  [[http://wiki.ubuntu.cz/Instalace/Pr%C5%AFvodce%20instalac%C3%AD?redirect=1|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 [[https://launchpad.net/gcc-arm-embedded|gcc-arm-embedded]].
 +
 +Pro instalaci do Ubuntu je možné využít před připravené [[https://launchpad.net/~terry.guo/+archive/gcc-arm-embedded|deb balíčky]]. PPA repositář zatím funguje pouze pro Ubuntu 12.04
 +
 +== Rychlá instalace pomocí repositáře ==
 +
 +  sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded
 +  sudo apt-get update
 +  sudo apt-get install gcc-arm-none-eabi
 +  
 +== 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 =====
 +
 +Programovací prostředí v kterém je vytvářen zdrojový kód. Mezi uživateli jsou nejoblíbenější následující dvě volby. Jinak lze ale zdrojový kód psát v libovolném textovém editoru. 
 +
 +==== Sublime text ====
 +
 +Je placený editor pro linux mezi jeho vyjímečné vlastnosti patří například náhled celého zdrojového kódu.
 +
 +[[http://www.ubuntuupdates.org/ppa/sublime|Ubuntu PPA repository]]
 +
 +==== Code::Blocks ====
 +
 +Jde o velmi rozřířený editor, jehož výhodou je, že běží na více platformách a mohou ho tedy používat i uživatelé windows.
 +
 +[[http://www.codeblocks.org/|Code::Blocks]]
 +
 +  sudo apt-get install codeblocks
 +  
 +  
 +===== Knihovny periférií =====
 +
 +Protože nastavení a obsluha  některých periferií mikroprocesorů ARM je nyní už velmi komplikovaná, je žádoucí si ušetřit práci a čas při vývoji, knihovnami, které již obsahují základní operace. 
 +
 +==== 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 [[http://www.st.com/stonline/stappl/resourceSelector/app?page=resourceSelector&doctype=FIRMWARE&SubClassID=1169|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).
 +
 +[[http://libopencm3.org|Webové stránky projektu]]
 +
 +===== Zápis přeloženého kódu =====
 +
 +Po přeložení zdrojového kódu je potřeba výsledný binární program zapsat do FLASH paměti mikroprocesoru. To lze udělat několika způsoby. Podle toho, jaký konkrétní procesor ARM máme a jak je konstruovaná elektronika ve které je procesor osazený. 
 +
 +==== Modul STM32F10xRxT01A ====
 +
 +=== Sériový 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. Procesory ARM STM32F103 umí používat sériový bootloader přes UART. Procesory řady STM32F107 umožňují použití i bootloaderu na USB. 
 +
 +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 [[http://code.google.com/p/stm32flash/|stm32flash]]). Pro nahrávání firmware přes USB je vhodný program [[http://dfu-util.gnumonks.org/|dfu-util]], který existuje pro Linux, Mac OS i Windows.
 +
 +== Připojení modulu ==
 +
 +Pro použití sériového bootloaderu je třeba modul připojit na seriovou linku. V případě použití modulu [[cs:usb232r|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.
 +  
 +=== USB bootloader ===
 +
 +[[http://dfu-util.gnumonks.org/|dfu-util]] je program, který umožní do procesorů ARM STM32F107 nahrávat firmware USB bootloaderem. 
 +
 +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 uložena v dokumentační složce modulu [[cs:stm32f10xrxt|STM32F10xRxT01A]]. 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 sekvence 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: [[http://www.mlab.cz/WebSVN/filedetails.php?repname=MLAB&path=%2FModules%2FARM%2FSTM32F10xRxT%2FSW%2FUSB_bootloader%2Fsample%2FSTM32F107_mouse.bin/|STM32F107_mouse.bin]]
 +  
 +==== J-TAG ====
 +
 +Jtag lze použít téměř s libovolným ARM mikroprocesorem.  
 +
 +K programování přes JTAG se potřebuje externí programátor. Na modulu [[cs:stm32f10xrxt|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 [[http://www.mlab.cz/PermaLink/JTAGFT2232V02A|JTAGFT2232V02A]]
 +
 +Programovat lze např. otevřeným programem [[http://openocd.sourceforge.net/|OpenOCD]], který podporuje většinu používaných JTAG programátorů a umí vytvořit back-end pro [[http://www.gnu.org/software/gdb/|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 [[cs:jtagft2232v|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  operační systém =====
 +
 +==== Chibios ====
 +
 +[[http://www.chibios.org/dokuwiki/doku.php|Webová stránka projektu]]
 + 
 +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 [[https://github.com/toxygen/mlab-chibios|githubu]] 
 +
 +Další programová dokumentace je dostupná [[http://chibios.sourceforge.net/html/index.html|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);
 +  
 +          }
 +  }
 +
 +
 +
  
cs/arm_programming.txt · Poslední úprava: 2015/03/30 16:37 (upraveno mimo DokuWiki)