ARM tanfolyam 2. előadás
Fejlesztő környezet - Codesourcery G++ lite: Letölthető a mentorgraphics honlapjáról (ARM-EABI változat) Eclipse CDT GNU-ARM Eclipse plugin
ARM-hoz tartozó fájlok A gyártó honlapjáról letölthető, Általában standard peripherials library néven fut, és .zip fájlban van Továbbá az esetleges devboardhoz tartozó fájlok, driverek, programozó szoftverek
Telepítési sorrend Codesourcery G++ lite telepítése a C:\ARM\Codesourcery mappába Eclipse bemásolása a C:\ARM\eclipse mappába Az eclipse indítása után: Help->Install New Software->Add és a .zip fájt megadni (GNU-ARM plugin) (next-next-ok :D )
Új project File->New->C project->ARM Cross Target application és kiválasztani hogy Sourcery G++ lite Utána a köv. oldalon csak a Release mellett legyen pipa Majd Finish
Project konfigolása Ezután CMSIS mappát létrehozni és telepakolni fájlokkal DE: Most egszerűbb, mert előre kiadtam egy üres projectet
Beállítások A Project Explorerben a project nevén jobbklikk->Properties… A feljövő ablakban baloldalt a C/C++ build->Settings menüpontot megnyitni
Target processor->Cortex-M0 …GCC C Compiler->Directories: hozzáadni a projecten belül a CMSIS mappát …GCC C Compiler->Miscellanous->Language standard: ISO C99 with GNU extensions Majd a …GCC C linker-> stm32_flash.ld
Szükséges fájlok összegyűjtése A kontrollerhez letöltött libraryból fájlokat kell összeválogatni STM32F0xx_StdPeriph_Lib_V1.0.0\Libraries\CMSIS\Device\ST\STM32F0xx\Include\ \Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\TrueSTUDIO\ .s ASM file ->A kiterjesztést .S-re átírni (nagy .S) Libraries\CMSIS\Device\ST\STM32F0xx\Source\Templates\ ebből a system_stm32f0xx.c \Libraries\CMSIS\Include\ összes .H \Libraries\STM32F0xx_StdPeriph_Driver\ ebből az \inc és \src mappából most az alábbiakat ….rcc.c és rcc.h ->órajel modul driver ….gpio.c és gpio.h -> portlábakhoz állítgató cuccok, meg konfig cuccok ….tim.c és tim.h -> timer Linkerscript: …\Project\STM32F0xx_StdPeriph_Templates\TrueSTUDIO\Project\stm32_flash.ld És a konfigfájl, ez lehet innen: …\Project\STM32F0xx_StdPeriph_Examples\GPIO\IOToggle\stm32f0xx_conf.h
Mintaprojectek Tök jól használható mintakódok vannak a .zip fájlban a \Project\STM32F0xx_StdPeriph_Examples mappában. Perifériánként csoportosítva a mintakódokat. A projecteket sajnos nem lehet csak úgy megnyitni, de ugyanígy összegyűjthetőek mint visszább írtam
stm32f0xx_conf.h Csak azokat a fájlokat kapcsoljuk be amit használunk, mert a beincluedolt fájlokat befordítja Save! Majd build!
Hibák Assert_param-> be kell incluedolni a stm32f0xx_conf.h fájlt a periféria drivereknél a .c-be Javítás:
Hibák, folytatás… A startup.S-ben ki kell kommentelni a bl __libc_init_array sort -->nem lesz malloc :( de megvagyunk nélküle, meg elvileg kijavítható hiba
Hibajavítás után… Hibátlan fordítás Nekiállhatunk értelmeset kódolni…
LED villogtató Csináljunk egyszerű hello world progit Kell hozzá: Késleltetés LED villogtatás
Szoftveres késleltetés Fontos a volatile kifejezés Ezt írjuk a main() elé
GPIO init A panelon a PC8-as lábon lévő LED-et akarjuk villogtatni Órajelet adni a perifériának->ADATLAP
Egészítsük ki a main-t! Save + Build
Letöltés STM32 ST-LINK Utility File open-> \Project\release\.... .hex OK->Program-> Majd a boardon reset gomb Örül!
Következő project: PWM PC9 LED-en ->adatlap ->TIM3_CH4 Alteratív funkcióba átkapcsolni TIM3-nak órajelet adni Időalapot beállítani OutputCompare modult beállítani Tetszőlegesen kitöltési tényezőt állítani
Timer Init
main() kiegészítése Build majd Press play on tape
IT kezelés Mi lenne ha, nem soft módon késleltetnénk, hanem IT-vel? Már jár egy timerünk, 100Hz-el Írjunk egy IT rutint, ami a kék LED-et kapcsolgatja!
IT kezelő konfigolása
IT handler Létrehozni az IT kezelő fgv-t, a fgv nevét a startup.S fájlból lehet kihámozni A flaget nekünk kell törölni
A main() kiegészítése Globális változók (volatile!)
Hardfault handler Mint a kékhalál a PC-nél. Célszerű belerakni egy LED bekapcsolását
A mai alkalom után tudunk… GPIO-t kezelni Timer-t elindítani, OC modult használni IT-t bekapcsolni, használni Szabad otthon kísérletezni :)
Köszönöm a figyelmet!