Search
Seznámíte se s koncepcí fungování mikrokontrolérů, jak jsou konstruované uvnitř.
Nainstalovat prostředí pro vytváření programu podle preferencí každého. Všechna prostředí produkují stejný výsledek, takže záleží na každém, co bude používat. Jednotliví cvičící používají tyto programy:
Datasheet STM32F401 .
Referenční manuál STM32F401
Mikrokontrolér (MCU) je sekvenční programovatelný obvod se zabudovanými periferiemi a pamětí uvnitř čipu. Některé MCU disponují ještě externí pamětí, kterou lze využít na rozšířenou RAM paměť nebo další periferie. Činnost MCU závisí na posloupnosti příkazů strojového kódu programu uloženého v paměti ROM nebo dočasně v paměti RAM. Každá instrukce vyžaduje určitý strojový čas na své provedení. Pro zvýšení rychlosti mikrokontroléru se používá tzv. pipeline příkazů, kdy se při zpracování překrývají fáze více instrukcí. Díky tomu se v jednom okamžiku mohou současně zpracovávat různé části několika instrukcí a zvyšuje se propustnost jádra, viz. následující schéma nebo Referenční manuál STM32F401 na straně 48.
Fig. 1
Fig. 2
Strukturu najdete též v datasheetu STM32F401 na straně 14 .
Na blokovém schématu je vidět, z jakých hlavních částí se mikrokontrolér skládá a jak jsou tyto části vzájemně propojeny. Pro orientaci v datasheetu je užitečné sledovat zejména:
NVIC
MPU
ETM
FPU
AHB
APB1
APB2
PLL
Reset & clock control
USART
SPI
I2C
USB
SDIO
ADC
DMA
EXTI
RTC
Z tohoto schématu lze rychle zjistit, jaké periferie daný mikrokontrolér obsahuje, na kterou sběrnici jsou připojené, odkud jsou taktované a jak souvisejí s externími piny pouzdra.
Architektura jádra ARM je navržena s lineárním 32-bitovým paměťovým prostorem, kde pro jednotlivé části je vyhrazeno zpravidla 512 MB paměti, což odpovídá adresám pro:
0x0000 0000
0x1FFF FFFF
0x2000 0000
0x3FFF FFFF
0x4000 0000
0x5FFF FFFF
V případě, že mikrokontrolér má paměť pro oblast ROM a RAM menší než 512 MB, je využita zpravidla pouze spodní část adres. U STM32F401RE je interní Flash fyzicky umístěna na adrese 0x0800 0000. Při startu z interní Flash je tato paměť současně dostupná i přes alias na adrese 0x0000 0000, odkud procesor po resetu načítá vektorovou tabulku. Konkrétně:
0x0800 0000
0x0807 FFFF
0x2001 7FFF
Informace o paměťovém prostoru najdete v datasheetu na straně 51 .
Každý mikrokontrolér obsahuje sadu registrů pro ovládání jednotlivých periferií nebo interních obvodů/bloků. Abychom mohli s mikrokontrolérem pracovat, je třeba se seznámit se základní konfigurací následujících registrů: RCC, GPIOx, NVIC, EXTI a pochopit jejich použití. Obecně jsou registry jednotlivých periferií umístěny v adresovém prostoru na určité bázové adrese a konkrétní konfigurační registry jsou určeny offsetem od této bázové adresy.
RCC
GPIOx
Přístup z jazyka C se po vložení hlavičkového souboru provádí přes strukturu daného registru, např. pro skupinu RCC a registr AHB1ENR:
AHB1ENR
Referenční manuál STM32F401 na straně 110.
RCC→AHB1ENR
Pro přístup z jazyka symbolických adres se využívá nastavení pomocných registrů a offsetu instrukce LDR, viz příklad 01 - GPIO LED a Vybraná instrukční sada pro STM32
Na následujících řádcích je práce s registrem RCC→AHB1ENR, který je na bázové adrese 0x40023800 s posunem o 0x30. Instrukce načte do registru R2 obsah z adresy 0x40023830.
0x40023800
0x30
0x40023830
ldr R0, =0x40023800 ldr R1, =0x30 ldr R2, [R0, R1]