Vývojový modul STM32 Primer 2 & FreeRTOS
STM32 Primer 2 je vývojový kit společnosti Raisonance, který umožňuje demonstrovat sílu a univerzálnost 32-bitového mikrokontroléru založeného na architektuře ARM. Na internetu je sice velké množství demonstračních aplikací, ale vždy chybí jednoduché tutoriály „pro blbé”, typu jak zprovoznit to či ono. Pokud se navíc stane, že v nové verzi vývojového studia (zde Ride7 taktéž od Raisonance) nejdou zkompilovat některé dřívější demonstrační projekty, pak trvá zprovozňování takového modulu poměrně dlouho.
Hardware STM32 Primer 2
- Mikrokontrolér STM32F103VET6 (jádro ARM Cortex M3, 512KiB Flash, 64KiB SRAM)
- Takt procesoru až 72MHz
- Teplotní čidlo
- 12 bit ADC, 12 bit DAC, PWM
- Sběrnice CAN, USART, SPI, I2C, IrDA, LIN
- Dotykový grafický LCD displej (barevný, 128x160 pixelů)
- Směrový joystick se středovým tlačítkem, 4 tlačítka na displeji
- Mikrofon a reproduktor pro záznam a reprodukci zvuku, sluchátkový výstup
- 3 osý akcelerometr
- Slot pro Micro SD kartu
- Li-Ion akumulátor 3,7V/400mAh, nabijí se přes USB
- Rozšiřující 20 pinový konektor do kterého lze zasunout vlastní rozšiřující modul
- Dva mini USB konektory, jeden pro programování a ladění, druhý pro uživatelské aplikace
Dále jsou dostupné ze stránek STMicroelectronics různé knihovny v jazyku C pro kompletní ovládání periferií, navíc i hotové aplikace pro práci s USB protokolem a SD kartou. To výrazně urychluje vývoj dalších aplikací a rovněž má pozitivní vliv na jejich spolehlivost. Ladění přes USB sběrnici je umožněno díky vestavěnému programátoru/debuggeru RLink, jenž je připojen k mikrokontroléru přes rozhraní SWD (Serial Wire Debug). Primer 2 nepodporuje JTAG (narozdíl od Primeru 1), takže uživatelé Linuxu, kteří používají oblíbené OpenOCD, mají smůlu.
K vývojovému kitu je možné stáhnout řadu demonstračních aplikací ze stránek stm32circle.com, mezi nimi je i testovací operační systém CircleOS. Říkám testovací, neboť v něm lze odladit relativně velké množství základních aplikací, avšak pro větší projekty se nehodí. Navíc v něm nefungují mechanismy správy paměti a ani multitasking - není to prostě real-time OS.
Proto byl jako hlavní operační systém zvolen freeRTOS, jenž je velmi rozšířený mezi embedded real-time aplikacemi a existuje pro něj mnoho portovaných implementací (např. pro AVR, Freescale HC08 nebo představovaný STM32 s jádrem Cortex M-3).
Demo
Následující demo přejímá některé zdrojové soubory z testovací aplikace SimplePrimer2, která se nachází na stránkách STM32Circle.com. Po jeho spuštění jsou vytvořeny dvě jednoduché úlohy, z nichž jedna periodicky vypíná a zapíná zelenou LED v intervalu 0,5s a druhá provádí totéž s červenou LED, pouze s periodou 3s. Demo je založené na FreeRTOS 6.1.1 a knihovně nízkoúrovňových periferních ovladačů od STMicroelectronics (verze 3.40). Je kompilované překladačem GCC, který je součástí vývojového prostředí Ride7 (konkrétně 7.30.10). Oproti původnímu demu a oproti originální distribuci FreeRTOS je změněna struktura adresářů, navíc jsou ostatní nepotřebné demonstrační aplikace odstraněny.
Při vytváření projektu v prostředí Ride7 je nutné věnovat pozornost direktivám #define a také vhodnému nastavení cest. Proto ve vlastnostech projektu ověříme následující parametry GCC:
Include Directories - tyto cesty se nastavují pro korektní nalezení a vložení hlavičkových souborů při kompilaci.
- .;
- $(ApplicationDir)\freeRTOS\Source\include; (hlavičkové soubory FreeRTOS)
- $(ApplicationDir)\freeRTOS\Source\portable\GCC\ARM_CM3; (implementace portu FreeRTOS na architekturu Cortex-M3)
- $(ApplicationDir)\freeRTOS; (konfigurace FreeRTOS v souboru freeRTOSConfig.h)
- $(ApplicationDir)\stm32; (základní definice procesoru)
- .\Libraries\CMSIS\CM3\CoreSupport; (základní abstrakce pro asemblerové instrukce)
- .\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x; (datové struktury jádra a periferií)
- .\Libraries\STM32F10x_StdPeriph_Driver\inc; (standardní knihovna od ST)
- $(RkitLib)\ARM\include
Defines - dodefinování parametrů mikrokontroléru
- GCC_ARMCM3 (definuje, který port pro FreeRTOS bude použit)
- STM32F10X_HD (upřesnění typu procesoru - HD znamená High Density, produkty s FLASH pamětí 256-512 KiB)
- USE_STDPERIPH_DRIVER (použití standardních komponent)
Nakonec nastavíme ve vlastnostech linkeru LD parametr Use Default Startup na No.
Kompilace a uploadování firmwaru do mikrokontroléru by měly proběhnout automaticky a bez problémů. U volně stažitelné verze Ride7 je pouze omezení pro maximální velikost debugovaného kódu na 32KiB, což ale tato demonstrační aplikace nepřesahuje. Jako další zdroje informací bych čtenářům doporučil FreeRTOS User Manual a také obsáhlou dokumentaci ST ke knihovně periferních ovladačů (ta je součástí instalace Ride7).

