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 en int i intervallet 0–255 från byten på addr; mem8[addr] = value skriver de låga 8 bitarna av value. addr kan vara vilken byte-justerad adress som helst.

stm.mem16

Indexerbar åtkomst till 16-bitars minne (halvord). mem16[addr] läser en int i intervallet 0–65535; mem16[addr] = value skriver de låga 16 bitarna. addr måste vara justerad till 2 byte.

stm.mem32

Indexerbar åtkomst till 32-bitars minne (ord). mem32[addr] läser en int i intervallet 0–0xFFFFFFFF; mem32[addr] = value skriver de låga 32 bitarna. addr må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. GPIOBGPIOK (intervallet beror på MCU-kapseln) följer samma mönster.

stm.USART1: int

Basadress för kringutrustningen USART1. Andra USART-/UART-instanser exponeras under USART2, USART3, UART4 … efter tillgänglighet.

stm.SPI1: int

Basadress för kringutrustningen SPI1. Ytterligare SPI-instanser visas som SPI2, SPI3, … upp till MCU:ns antal.

stm.I2C1: int

Basadress för kringutrustningen I2C1. I2C2I2C4 följer.

stm.TIM1: int

Basadress för avancerad styrningstimer TIM1. Allmänna och grundläggande timrar (TIM2TIM17 efter tillgänglighet) följer samma namngivning.

stm.ADC1: int

Basadress för ADC1. ADC2 / ADC3 visas på MCU:er med flera ADC-block.

stm.DAC: int

Basadress för DAC-kringutrustningen, på MCU:er som har en sådan.

stm.DMA1: int

Basadress för DMA1. DMA2 finns på de flesta STM32:or; H7-klassens delar exponerar även BDMA, MDMA och (på N6) HPDMA / GPDMA.

stm.RCC: int

Basadress för kringutrustningen Reset and Clock Control.

stm.EXTI: int

Basadress för External Interrupt / Event Controller.

stm.FLASH: int

Basadress för den inbyggda flashstyrenheten (kringutrustningen, inte själva flashfältet).

stm.SYSCFG: int

Basadress för System Configuration Controller.

stm.PWR: int

Basadress för Power Control-kringutrustningen.

stm.GPIO_BSRR: int

Offset för GPIO-registret för bit-sättning/-återställning inom valfri GPIOx-bas.

stm.GPIO_IDR: int

Offset för GPIO-registret för indata.

stm.GPIO_ODR: int

Offset för GPIO-registret för utdata.

stm.USART_CR1: int

Offset för USART/UART kontrollregister 1.

stm.TIM_CR1: int

Offset för timerns kontrollregister 1.

stm.TIM_CCR1: int

Offset för timerns infångnings-/jämförelseregister 1. TIM_CCR2TIM_CCR4 följer på timrar som har flera kanaler.

stm.RCC_CR: int

Offset för RCC:s klockkontrollregister.

stm.RCC_CFGR: int

Offset för RCC:s klockkonfigurationsregister.

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 en int.

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 acceptera stm.<any CMSIS name> utan diagnostiken ”module has no attribute”.