stm — STM32 MCU-kra jellemző funkcionalitás¶
Ez a modul az STM32 mikrokontrollerekre jellemző funkcionalitást biztosítja, beleértve a perifériaregiszterek közvetlen elérését is.
Memóriaelérés¶
A modul három indexelhető objektumot tesz elérhetővé a nyers memóriaeléréshez. Mindegyik egy bájtcím szerint indexelt ritka tömbként viselkedik: a value = memN[addr] olvas, a memN[addr] = value ír. A cím mindig bájtcím, függetlenül az elérés szélességétől.
Ezek a memóriaobjektumok az alábbi perifériaregiszter-konstansokkal kombinálva használhatók az MCU hardver-perifériaregisztereinek, valamint a SoC címterének bármely más helyének olvasására és írására.
- stm.mem8¶
Indexelhető 8 bites memóriaelérő. A
mem8[addr]egy 0-255 tartományba esőintértéket olvas azaddrcímen lévő bájtból; amem8[addr] = valueavaluealsó 8 bitjét írja. Azaddrbármely bájtigazított cím lehet.
- stm.mem16¶
Indexelhető 16 bites (félszó) memóriaelérő. A
mem16[addr]egy 0-65535 tartományba esőintértéket olvas; amem16[addr] = valueaz alsó 16 bitet írja. Azaddr2 bájtra igazított kell legyen.
- stm.mem32¶
Indexelhető 32 bites (szó) memóriaelérő. A
mem32[addr]egy 0-0xFFFFFFFF tartományba esőintértéket olvas; amem32[addr] = valueaz alsó 32 bitet írja. Azaddr4 bájtra igazított kell legyen.
Perifériaregiszter-konstansok¶
A stm modul elérhetővé teszi a CMSIS regisztercímek és -eltolások teljes készletét annak az STM32 családnak megfelelően, amelyre a firmware le lett fordítva. A nevek pontosan tükrözik az ST CMSIS fejléceit: STM32F427xx, STM32F765xx, STM32H743xx és STM32N657xx az M4, M7, H7 családon (H7 / H7 Plus / Pure Thermal) és az N6 OpenMV Cam eszközökön. A teljes névkészlet családonként több száz szimbólum (271 az M4-en, 306 az M7-en, 494 a H7-en, 594 az N6-on); ezek itteni felsorolása egyszerűen csak megduplázná az ST referencia-kézikönyvét és CMSIS fejléceit.
Két névadási konvenciót használnak:
A periféria-példányról elnevezett konstansok (
GPIOA,USART1,TIM2, …) abszolút báziscímek.A periféria típusával prefixált konstansok (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) regisztereltolások a megfelelő bázishoz képest.
Adj össze egy abszolút bázist és egy regisztereltolást, hogy megkapd egyetlen regiszter teljes címét. Például a stm.GPIOA + stm.GPIO_BSRR a GPIOA->BSRR abszolút címe.
Példa:
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
Reprezentatív konstansok¶
Az alábbi válogatás minden fő perifériakategóriából egy bejegyzést tartalmaz, úgy kiválasztva, hogy a névadási konvenció egy pillantásra is világos legyen. Az adott build-célhoz tartozó minden további CMSIS szimbólum szintén elérhető a modulon – lásd az alábbi __getattr__() függvényt a típusellenőrző tartaléklehetőségéhez.
- stm.GPIOA: int¶
A
GPIOAperiféria báziscíme. AGPIOB…GPIOK(a tartomány az MCU tokozásától függ) ugyanezt a mintát követik.
- stm.USART1: int¶
A
USART1periféria báziscíme. A többi USART / UART példány aUSART2,USART3,UART4… neveken érhető el, amennyiben rendelkezésre állnak.
- stm.SPI1: int¶
A
SPI1periféria báziscíme. A további SPI példányokSPI2,SPI3, … néven jelennek meg, az MCU darabszámáig.
- stm.TIM1: int¶
A
TIM1haladó vezérlésű időzítő báziscíme. Az általános célú és alapszintű időzítők (TIM2…TIM17, amennyiben rendelkezésre állnak) ugyanezt a névadást követik.
- stm.ADC1: int¶
Az
ADC1báziscíme. AzADC2/ADC3a több ADC blokkkal rendelkező MCU-kon jelennek meg.
- stm.DMA1: int¶
A
DMA1báziscíme. ADMA2a legtöbb STM32-n jelen van; a H7-osztályú alkatrészek aBDMA,MDMAés (az N6-on) aHPDMA/GPDMAperifériákat is elérhetővé teszik.
- stm.EXTI: int¶
A külső megszakítás-/eseményvezérlő (External Interrupt / Event Controller) báziscíme.
- stm.TIM_CCR1: int¶
Az időzítő 1. elfogó/összehasonlító regiszterének eltolása. A
TIM_CCR2…TIM_CCR4a több csatornával rendelkező időzítőkön követi.
- stm.__getattr__(name: str) int¶
Dinamikus attribútum-tartalék: a firmware által elérhetővé tett bármely CMSIS szimbólum, amely fent nincs egyenként felsorolva (pl.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, a különféle bitmező-eltolások és -maszkok, …), továbbra is feloldódik az abszolút címére vagy eltolásáraintformájában.A futásidejű modul ezeket a szimbólumokat közvetlenül a globals szótárába tölti az import idején, így a
__getattr__valójában soha nem hívódik meg. A szignatúra kizárólag azért van elérhetővé téve, hogy a statikus típusellenőrzők (Pyright, Pylance, mypy) elfogadják astm.<any CMSIS name>formát egy „module has no attribute” diagnosztikai üzenet nélkül.