stm — functionaliteit specifiek voor STM32-MCU’s¶
Deze module biedt functionaliteit die specifiek is voor STM32-microcontrollers, waaronder directe toegang tot randapparaatregisters.
Geheugentoegang¶
De module stelt drie subscriptbare objecten beschikbaar voor ruwe geheugentoegang. Elk gedraagt zich als een schaarse array geïndexeerd op byteadres: value = memN[addr] leest, memN[addr] = value schrijft. Het adres is altijd een byteadres, ongeacht de toegangsbreedte.
Deze geheugenobjecten kunnen worden gebruikt in combinatie met de hieronder beschreven randapparaatregisterconstanten om hardware-randapparaatregisters van de MCU te lezen en te schrijven, evenals elke andere locatie in de adresruimte van de SoC.
- stm.mem8¶
Subscriptbare 8-bit geheugentoegang.
mem8[addr]leest eenintin het bereik 0-255 uit de byte opaddr;mem8[addr] = valueschrijft de laagste 8 bits vanvalue.addrmag elk byte-uitgelijnd adres zijn.
- stm.mem16¶
Subscriptbare 16-bit (halfwoord) geheugentoegang.
mem16[addr]leest eenintin het bereik 0-65535;mem16[addr] = valueschrijft de laagste 16 bits.addrmoet uitgelijnd zijn op 2 bytes.
- stm.mem32¶
Subscriptbare 32-bit (woord) geheugentoegang.
mem32[addr]leest eenintin het bereik 0-0xFFFFFFFF;mem32[addr] = valueschrijft de laagste 32 bits.addrmoet uitgelijnd zijn op 4 bytes.
Randapparaatregisterconstanten¶
De stm-module stelt de volledige set CMSIS-registeradressen en -offsets beschikbaar voor de STM32-familie waarvoor de firmware is gecompileerd. De namen weerspiegelen exact ST’s CMSIS-headers: STM32F427xx, STM32F765xx, STM32H743xx en STM32N657xx op respectievelijk de M4-, M7-, H7-familie (H7 / H7 Plus / Pure Thermal) en N6 OpenMV Cams. De volledige set namen omvat enkele honderden symbolen per familie (271 op M4, 306 op M7, 494 op H7, 594 op N6); ze hier opsommen zou simpelweg ST’s referentiehandleiding en CMSIS-headers dupliceren.
Er worden twee naamgevingsconventies gebruikt:
Constanten die zijn vernoemd naar een randapparaatinstantie (
GPIOA,USART1,TIM2, …) zijn absolute basisadressen.Constanten met een randapparaattype als voorvoegsel (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) zijn registeroffsets ten opzichte van de bijbehorende basis.
Tel een absolute basis en een registeroffset op om het volledige adres van een enkel register te krijgen. Bijvoorbeeld stm.GPIOA + stm.GPIO_BSRR is het absolute adres van GPIOA->BSRR.
Voorbeeld:
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
Representatieve constanten¶
De onderstaande selectie omvat één vermelding per belangrijke randapparaatcategorie, zo gekozen dat de naamgevingsconventie in één oogopslag duidelijk is. Elk ander CMSIS-symbool voor het build-doel is eveneens beschikbaar op de module – zie __getattr__() hieronder voor de fallback voor typecontroleurs.
- stm.GPIOA: int¶
Basisadres van het
GPIOA-randapparaat.GPIOB…GPIOK(het bereik hangt af van de MCU-behuizing) volgen hetzelfde patroon.
- stm.USART1: int¶
Basisadres van het
USART1-randapparaat. Andere USART-/UART-instanties worden beschikbaar gesteld onderUSART2,USART3,UART4… voor zover beschikbaar.
- stm.SPI1: int¶
Basisadres van het
SPI1-randapparaat. Aanvullende SPI-instanties verschijnen alsSPI2,SPI3, … tot het aantal van de MCU.
- stm.TIM1: int¶
Basisadres van de
TIM1advanced-control timer. General-purpose en basistimers (TIM2…TIM17voor zover beschikbaar) volgen dezelfde naamgeving.
- stm.DMA1: int¶
Basisadres van
DMA1.DMA2is aanwezig op de meeste STM32’s; H7-klasse onderdelen stellen ookBDMA,MDMAen (op de N6)HPDMA/GPDMAbeschikbaar.
- stm.FLASH: int¶
Basisadres van de embedded flashcontroller (het randapparaat, niet de flash-array zelf).
- stm.TIM_CCR1: int¶
Offset van het timer capture/compare-register 1.
TIM_CCR2…TIM_CCR4volgen op timers die meerdere kanalen hebben.
- stm.__getattr__(name: str) int¶
Fallback voor dynamische attributen: elk CMSIS-symbool dat door de firmware beschikbaar wordt gesteld en hierboven niet afzonderlijk is vermeld (bijv.
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, de diverse bitveldverschuivingen en -maskers, …) wordt nog steeds omgezet naar zijn absolute adres of offset als eenint.De runtime-module vult deze symbolen rechtstreeks in zijn globals-dict bij het importeren, dus
__getattr__wordt nooit daadwerkelijk aangeroepen. De signatuur wordt uitsluitend beschikbaar gesteld zodat statische typecontroleurs (Pyright, Pylance, mypy)stm.<any CMSIS name>accepteren zonder een “module has no attribute”-diagnose.