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 een int in het bereik 0-255 uit de byte op addr; mem8[addr] = value schrijft de laagste 8 bits van value. addr mag elk byte-uitgelijnd adres zijn.

stm.mem16

Subscriptbare 16-bit (halfwoord) geheugentoegang. mem16[addr] leest een int in het bereik 0-65535; mem16[addr] = value schrijft de laagste 16 bits. addr moet uitgelijnd zijn op 2 bytes.

stm.mem32

Subscriptbare 32-bit (woord) geheugentoegang. mem32[addr] leest een int in het bereik 0-0xFFFFFFFF; mem32[addr] = value schrijft de laagste 32 bits. addr moet 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. GPIOBGPIOK (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 onder USART2, USART3, UART4 … voor zover beschikbaar.

stm.SPI1: int

Basisadres van het SPI1-randapparaat. Aanvullende SPI-instanties verschijnen als SPI2, SPI3, … tot het aantal van de MCU.

stm.I2C1: int

Basisadres van het I2C1-randapparaat. I2C2I2C4 volgen.

stm.TIM1: int

Basisadres van de TIM1 advanced-control timer. General-purpose en basistimers (TIM2TIM17 voor zover beschikbaar) volgen dezelfde naamgeving.

stm.ADC1: int

Basisadres van ADC1. ADC2 / ADC3 verschijnen op MCU’s met meerdere ADC-blokken.

stm.DAC: int

Basisadres van het DAC-randapparaat, op MCU’s die er een hebben.

stm.DMA1: int

Basisadres van DMA1. DMA2 is aanwezig op de meeste STM32’s; H7-klasse onderdelen stellen ook BDMA, MDMA en (op de N6) HPDMA / GPDMA beschikbaar.

stm.RCC: int

Basisadres van het Reset and Clock Control-randapparaat.

stm.EXTI: int

Basisadres van de External Interrupt / Event Controller.

stm.FLASH: int

Basisadres van de embedded flashcontroller (het randapparaat, niet de flash-array zelf).

stm.SYSCFG: int

Basisadres van de System Configuration Controller.

stm.PWR: int

Basisadres van het Power Control-randapparaat.

stm.GPIO_BSRR: int

Offset van het GPIO bit set/reset-register binnen een willekeurige GPIOx-basis.

stm.GPIO_IDR: int

Offset van het GPIO-invoergegevensregister.

stm.GPIO_ODR: int

Offset van het GPIO-uitvoergegevensregister.

stm.USART_CR1: int

Offset van het USART/UART-controleregister 1.

stm.TIM_CR1: int

Offset van het timer-controleregister 1.

stm.TIM_CCR1: int

Offset van het timer capture/compare-register 1. TIM_CCR2TIM_CCR4 volgen op timers die meerdere kanalen hebben.

stm.RCC_CR: int

Offset van het RCC-klokcontroleregister.

stm.RCC_CFGR: int

Offset van het RCC-klokconfiguratieregister.

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

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.