stm — funkcionalnost specifična za STM32 MCU-ove¶
Ovaj modul omogućuje funkcionalnost specifičnu za STM32 mikrokontrolere, uključujući izravan pristup registrima periferije.
Pristup memoriji¶
Modul izlaže tri indeksirana objekta koja se koriste za izravan pristup memoriji. Svaki se ponaša poput rijetkog polja indeksiranog adresom bajta: value = memN[addr] čita, memN[addr] = value piše. Adresa je uvijek adresa bajta, neovisno o širini pristupa.
Ovi memorijski objekti mogu se koristiti u kombinaciji s konstantama registara periferije navedenima u nastavku za čitanje i pisanje hardverskih registara periferije MCU-a, kao i bilo koje druge lokacije u adresnom prostoru SoC-a.
- stm.mem8¶
Indeksirani 8-bitni pristupnik memoriji.
mem8[addr]čitaintu rasponu 0-255 iz bajta naaddr;mem8[addr] = valuepiše donjih 8 bitova vrijednostivalue.addrmože biti bilo koja adresa poravnata na bajt.
- stm.mem16¶
Indeksirani 16-bitni (poluriječni) pristupnik memoriji.
mem16[addr]čitaintu rasponu 0-65535;mem16[addr] = valuepiše donjih 16 bitova.addrmora biti poravnat na 2 bajta.
- stm.mem32¶
Indeksirani 32-bitni (riječni) pristupnik memoriji.
mem32[addr]čitaintu rasponu 0-0xFFFFFFFF;mem32[addr] = valuepiše donjih 32 bita.addrmora biti poravnat na 4 bajta.
Konstante registara periferije¶
Modul stm izlaže potpuni skup CMSIS adresa registara i pomaka za onu STM32 obitelj za koju je ugrađeni program (firmware) bio preveden. Imena točno zrcale ST-ove CMSIS zaglavlja: STM32F427xx, STM32F765xx, STM32H743xx i STM32N657xx na M4, M7, H7 obitelji (H7 / H7 Plus / Pure Thermal) odnosno N6 OpenMV Cam kamerama. Potpuni skup imena iznosi nekoliko stotina simbola po obitelji (271 na M4, 306 na M7, 494 na H7, 594 na N6); njihovo nabrajanje ovdje samo bi duplo ponovilo ST-ov referentni priručnik i CMSIS zaglavlja.
Koriste se dvije konvencije imenovanja:
Konstante nazvane po instanci periferije (
GPIOA,USART1,TIM2, …) su apsolutne bazne adrese.Konstante s prefiksom tipa periferije (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) su pomaci registara u odnosu na odgovarajuću bazu.
Zbrojite apsolutnu bazu i pomak registra kako biste dobili punu adresu pojedinačnog registra. Na primjer stm.GPIOA + stm.GPIO_BSRR je apsolutna adresa GPIOA->BSRR.
Primjer:
import stm
# set PA2 high
stm.mem32[stm.GPIOA + stm.GPIO_BSRR] = 1 << 2
# read PA3
value = (stm.mem32[stm.GPIOA + stm.GPIO_IDR] >> 3) & 1
Reprezentativne konstante¶
Donji odabir pokriva po jedan unos za svaku glavnu kategoriju periferije, biran tako da konvencija imenovanja bude jasna na prvi pogled. Svaki drugi CMSIS simbol za ciljnu kompilaciju također je dostupan u modulu – pogledajte __getattr__() u nastavku za rezervno ponašanje pri provjeri tipova.
- stm.GPIOA: int¶
Bazna adresa periferije
GPIOA.GPIOB…GPIOK(raspon ovisi o pakiranju MCU-a) slijede isti obrazac.
- stm.USART1: int¶
Bazna adresa periferije
USART1. Druge USART / UART instance izložene su podUSART2,USART3,UART4… ovisno o dostupnosti.
- stm.SPI1: int¶
Bazna adresa periferije
SPI1. Dodatne SPI instance pojavljuju se kaoSPI2,SPI3, … do broja koji MCU podržava.
- stm.TIM1: int¶
Bazna adresa naprednog upravljačkog mjerača vremena
TIM1. Mjerači vremena opće namjene i osnovni mjerači vremena (TIM2…TIM17ovisno o dostupnosti) slijede isto imenovanje.
- stm.DMA1: int¶
Bazna adresa
DMA1.DMA2je prisutan na većini STM32-ova; dijelovi klase H7 također izlažuBDMA,MDMAi (na N6)HPDMA/GPDMA.
- stm.EXTI: int¶
Bazna adresa upravljača vanjskih prekida / događaja (External Interrupt / Event Controller).
- stm.FLASH: int¶
Bazna adresa upravljača ugrađene flash memorije (periferije, ne samog polja flash memorije).
- stm.GPIO_BSRR: int¶
Pomak registra za postavljanje/poništavanje bita GPIO-a unutar bilo koje baze
GPIOx.
- stm.TIM_CCR1: int¶
Pomak registra za hvatanje/usporedbu 1 mjerača vremena.
TIM_CCR2…TIM_CCR4slijede na mjeračima vremena koji imaju više kanala.
- stm.__getattr__(name: str) int¶
Rezervno ponašanje za dinamičke atribute: svaki CMSIS simbol koji izlaže ugrađeni program (firmware), a koji nije pojedinačno naveden gore (npr.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, razni pomaci i maske bitnih polja, …) i dalje se razrješava u svoju apsolutnu adresu ili pomak kaoint.Modul tijekom izvođenja popunjava te simbole izravno u svoj globalni rječnik (globals) prilikom uvoza, pa se
__getattr__zapravo nikada ne poziva. Potpis je izložen isključivo kako bi statički provjerivači tipova (Pyright, Pylance, mypy) prihvatilistm.<any CMSIS name>bez dijagnostike „module has no attribute”.