stm — funktionalitet specifik för STM32-MCU:er¶
Denna modul tillhandahåller funktionalitet specifik för STM32-mikrokontroller, inklusive direkt åtkomst till kringutrustningsregister.
Minnesåtkomst¶
Modulen exponerar tre indexerbara objekt som används för rå minnesåtkomst. Vart och ett beter sig som en gles array indexerad efter byteadress: value = memN[addr] läser, memN[addr] = value skriver. Adressen är alltid en byteadress, oavsett åtkomstbredd.
Dessa minnesobjekt kan användas i kombination med konstanterna för kringutrustningsregister nedan för att läsa och skriva MCU:ns hårdvaruregister för kringutrustning, liksom vilken annan plats som helst i SoC:ns adressrymd.
- stm.mem8¶
Indexerbar åtkomst till 8-bitars minne.
mem8[addr]läser eninti intervallet 0–255 från byten påaddr;mem8[addr] = valueskriver de låga 8 bitarna avvalue.addrkan vara vilken byte-justerad adress som helst.
- stm.mem16¶
Indexerbar åtkomst till 16-bitars minne (halvord).
mem16[addr]läser eninti intervallet 0–65535;mem16[addr] = valueskriver de låga 16 bitarna.addrmåste vara justerad till 2 byte.
- stm.mem32¶
Indexerbar åtkomst till 32-bitars minne (ord).
mem32[addr]läser eninti intervallet 0–0xFFFFFFFF;mem32[addr] = valueskriver de låga 32 bitarna.addrmåste vara justerad till 4 byte.
Konstanter för kringutrustningsregister¶
Modulen stm exponerar hela uppsättningen CMSIS-registeradresser och offsetar för den STM32-familj som den fasta programvaran kompilerades för. Namnen speglar ST:s CMSIS-headers exakt: STM32F427xx, STM32F765xx, STM32H743xx och STM32N657xx på OpenMV Cams i M4-, M7-, H7-familjen (H7 / H7 Plus / Pure Thermal) respektive N6. Hela uppsättningen namn är flera hundra symboler per familj (271 på M4, 306 på M7, 494 på H7, 594 på N6); att räkna upp dem här skulle bara duplicera ST:s referensmanual och CMSIS-headers.
Två namnkonventioner används:
Konstanter uppkallade efter en kringutrustningsinstans (
GPIOA,USART1,TIM2, …) är absoluta basadresser.Konstanter med prefix av en kringutrustningstyp (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) är registeroffsetar relativa till den matchande basen.
Addera en absolut bas och en registeroffset för att få den fullständiga adressen till ett enskilt register. Till exempel är stm.GPIOA + stm.GPIO_BSRR den absoluta adressen till GPIOA->BSRR.
Exempel:
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
Representativa konstanter¶
Urvalet nedan täcker en post per större kringutrustningskategori, valt så att namnkonventionen blir tydlig vid en snabb blick. Alla andra CMSIS-symboler för byggmålet är också tillgängliga i modulen – se __getattr__() nedan för fallback-läget för typkontrollen.
- stm.GPIOA: int¶
Basadress för kringutrustningen
GPIOA.GPIOB…GPIOK(intervallet beror på MCU-kapseln) följer samma mönster.
- stm.USART1: int¶
Basadress för kringutrustningen
USART1. Andra USART-/UART-instanser exponeras underUSART2,USART3,UART4… efter tillgänglighet.
- stm.SPI1: int¶
Basadress för kringutrustningen
SPI1. Ytterligare SPI-instanser visas somSPI2,SPI3, … upp till MCU:ns antal.
- stm.TIM1: int¶
Basadress för avancerad styrningstimer
TIM1. Allmänna och grundläggande timrar (TIM2…TIM17efter tillgänglighet) följer samma namngivning.
- stm.DMA1: int¶
Basadress för
DMA1.DMA2finns på de flesta STM32:or; H7-klassens delar exponerar ävenBDMA,MDMAoch (på N6)HPDMA/GPDMA.
- stm.FLASH: int¶
Basadress för den inbyggda flashstyrenheten (kringutrustningen, inte själva flashfältet).
- stm.GPIO_BSRR: int¶
Offset för GPIO-registret för bit-sättning/-återställning inom valfri
GPIOx-bas.
- stm.TIM_CCR1: int¶
Offset för timerns infångnings-/jämförelseregister 1.
TIM_CCR2…TIM_CCR4följer på timrar som har flera kanaler.
- stm.__getattr__(name: str) int¶
Fallback för dynamiska attribut: vilken CMSIS-symbol som helst som exponeras av den fasta programvaran och som inte listas individuellt ovan (t.ex.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, de olika bitfältsförskjutningarna och -maskerna, …) resolveras fortfarande till sin absoluta adress eller offset som enint.Körtidsmodulen fyller i dessa symboler direkt i sin globals-dict vid importtillfället, så
__getattr__anropas i själva verket aldrig. Signaturen exponeras enbart för att statiska typkontrollverktyg (Pyright, Pylance, mypy) ska accepterastm.<any CMSIS name>utan diagnostiken ”module has no attribute”.