stm — funkcionalita specifická pro STM32 MCU¶
Tento modul poskytuje funkcionalitu specifickou pro mikrokontroléry STM32, včetně přímého přístupu k registrům periferií.
Přístup do paměti¶
Modul vystavuje tři indexovatelné objekty používané pro přímý přístup do paměti. Každý se chová jako řídké pole indexované adresou bajtu: value = memN[addr] čte, memN[addr] = value zapisuje. Adresa je vždy adresou bajtu, bez ohledu na šířku přístupu.
Tyto paměťové objekty lze v kombinaci s níže uvedenými konstantami registrů periferií použít ke čtení a zápisu registrů hardwarových periferií MCU, stejně jako jakéhokoli jiného místa v adresním prostoru SoC.
- stm.mem8¶
Indexovatelný 8bitový přístupový objekt paměti.
mem8[addr]čteintv rozsahu 0-255 z bajtu na adreseaddr;mem8[addr] = valuezapisuje spodních 8 bitů hodnotyvalue.addrmůže být libovolná adresa zarovnaná na bajt.
- stm.mem16¶
Indexovatelný 16bitový (halfword) přístupový objekt paměti.
mem16[addr]čteintv rozsahu 0-65535;mem16[addr] = valuezapisuje spodních 16 bitů.addrmusí být zarovnaná na 2 bajty.
- stm.mem32¶
Indexovatelný 32bitový (word) přístupový objekt paměti.
mem32[addr]čteintv rozsahu 0-0xFFFFFFFF;mem32[addr] = valuezapisuje spodních 32 bitů.addrmusí být zarovnaná na 4 bajty.
Konstanty registrů periferií¶
Modul stm vystavuje úplnou sadu adres a offsetů registrů CMSIS pro tu rodinu STM32, pro kterou byl firmware zkompilován. Názvy přesně odpovídají hlavičkovým souborům CMSIS od ST: STM32F427xx, STM32F765xx, STM32H743xx a STM32N657xx na OpenMV Cams rodiny M4, M7, H7 (H7 / H7 Plus / Pure Thermal) a N6. Úplná sada názvů čítá několik set symbolů na rodinu (271 na M4, 306 na M7, 494 na H7, 594 na N6); jejich výčet zde by pouze duplikoval referenční příručku ST a hlavičkové soubory CMSIS.
Používají se dvě konvence pojmenování:
Konstanty pojmenované podle instance periferie (
GPIOA,USART1,TIM2, …) jsou absolutní bázové adresy.Konstanty s prefixem typu periferie (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) jsou offsety registrů relativní vůči odpovídající bázi.
Sečtením absolutní báze a offsetu registru získáte úplnou adresu jednoho registru. Například stm.GPIOA + stm.GPIO_BSRR je absolutní adresa GPIOA->BSRR.
Příklad:
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
Reprezentativní konstanty¶
Níže uvedený výběr pokrývá jednu položku na každou hlavní kategorii periferií, zvolenou tak, aby byla konvence pojmenování na první pohled zřejmá. Každý další symbol CMSIS pro daný cíl sestavení je rovněž v modulu dostupný – viz __getattr__() níže pro náhradní řešení pro typovou kontrolu.
- stm.GPIOA: int¶
Bázová adresa periferie
GPIOA.GPIOB…GPIOK(rozsah závisí na pouzdru MCU) následují stejný vzor.
- stm.USART1: int¶
Bázová adresa periferie
USART1. Další instance USART / UART jsou vystaveny podUSART2,USART3,UART4… podle dostupnosti.
- stm.SPI1: int¶
Bázová adresa periferie
SPI1. Další instance SPI se objevují jakoSPI2,SPI3, … až do počtu odpovídajícího MCU.
- stm.TIM1: int¶
Bázová adresa časovače
TIM1s pokročilým řízením. Univerzální a základní časovače (TIM2…TIM17podle dostupnosti) následují stejné pojmenování.
- stm.DMA1: int¶
Bázová adresa
DMA1.DMA2je přítomna na většině STM32; součásti třídy H7 navíc vystavujíBDMA,MDMAa (na N6)HPDMA/GPDMA.
- stm.FLASH: int¶
Bázová adresa řadiče vestavěné flash paměti (periferie, nikoli samotného pole flash paměti).
- stm.TIM_CCR1: int¶
Offset registru capture/compare 1 časovače.
TIM_CCR2…TIM_CCR4následují na časovačích, které mají více kanálů.
- stm.__getattr__(name: str) int¶
Náhradní řešení pro dynamické atributy: jakýkoli symbol CMSIS vystavený firmwarem, který není individuálně uveden výše (např.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, různé posuny a masky bitových polí, …), se stále vyhodnotí na svou absolutní adresu nebo offset jakoint.Běhový modul vkládá tyto symboly přímo do svého slovníku globals při importu, takže
__getattr__se ve skutečnosti nikdy nevolá. Signatura je vystavena pouze proto, aby statické typové kontroly (Pyright, Pylance, mypy) přijalystm.<any CMSIS name>bez diagnostiky „module has no attribute“.