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 az addr címen lévő bájtból; a mem8[addr] = value a value alsó 8 bitjét írja. Az addr bá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; a mem16[addr] = value az alsó 16 bitet írja. Az addr 2 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; a mem32[addr] = value az alsó 32 bitet írja. Az addr 4 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 GPIOA periféria báziscíme. A GPIOBGPIOK (a tartomány az MCU tokozásától függ) ugyanezt a mintát követik.

stm.USART1: int

A USART1 periféria báziscíme. A többi USART / UART példány a USART2, USART3, UART4 … neveken érhető el, amennyiben rendelkezésre állnak.

stm.SPI1: int

A SPI1 periféria báziscíme. A további SPI példányok SPI2, SPI3, … néven jelennek meg, az MCU darabszámáig.

stm.I2C1: int

Az I2C1 periféria báziscíme. Az I2C2I2C4 követik.

stm.TIM1: int

A TIM1 haladó vezérlésű időzítő báziscíme. Az általános célú és alapszintű időzítők (TIM2TIM17, amennyiben rendelkezésre állnak) ugyanezt a névadást követik.

stm.ADC1: int

Az ADC1 báziscíme. Az ADC2 / ADC3 a több ADC blokkkal rendelkező MCU-kon jelennek meg.

stm.DAC: int

A DAC periféria báziscíme azokon az MCU-kon, amelyeken van ilyen.

stm.DMA1: int

A DMA1 báziscíme. A DMA2 a legtöbb STM32-n jelen van; a H7-osztályú alkatrészek a BDMA, MDMA és (az N6-on) a HPDMA / GPDMA perifériákat is elérhetővé teszik.

stm.RCC: int

A Reset and Clock Control periféria báziscíme.

stm.EXTI: int

A külső megszakítás-/eseményvezérlő (External Interrupt / Event Controller) báziscíme.

stm.FLASH: int

A beágyazott flash vezérlő (a periféria, nem maga a flash tömb) báziscíme.

stm.SYSCFG: int

A System Configuration Controller báziscíme.

stm.PWR: int

A Power Control periféria báziscíme.

stm.GPIO_BSRR: int

A GPIO bit beállító/törlő regiszterének eltolása bármely GPIOx bázison belül.

stm.GPIO_IDR: int

A GPIO bemeneti adatregiszterének eltolása.

stm.GPIO_ODR: int

A GPIO kimeneti adatregiszterének eltolása.

stm.USART_CR1: int

Az USART/UART 1. vezérlőregiszterének eltolása.

stm.TIM_CR1: int

Az időzítő 1. vezérlőregiszterének eltolása.

stm.TIM_CCR1: int

Az időzítő 1. elfogó/összehasonlító regiszterének eltolása. A TIM_CCR2TIM_CCR4 a több csatornával rendelkező időzítőkön követi.

stm.RCC_CR: int

Az RCC órajel-vezérlő regiszterének eltolása.

stm.RCC_CFGR: int

Az RCC órajel-konfigurációs regiszterének eltolása.

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ára int formá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 a stm.<any CMSIS name> formát egy „module has no attribute” diagnosztikai üzenet nélkül.