stm — funcționalitate specifică microcontrolerelor STM32¶
Acest modul oferă funcționalitate specifică microcontrolerelor STM32, inclusiv acces direct la registrele perifericelor.
Acces la memorie¶
Modulul expune trei obiecte indexabile folosite pentru acces brut la memorie. Fiecare se comportă ca un tablou rar indexat după adresa de octet: value = memN[addr] citește, memN[addr] = value scrie. Adresa este întotdeauna o adresă de octet, indiferent de lățimea accesului.
Aceste obiecte de memorie pot fi folosite în combinație cu constantele de registru ale perifericelor de mai jos pentru a citi și scrie registrele perifericelor hardware ale MCU-ului, precum și orice altă locație din spațiul de adrese al SoC-ului.
- stm.mem8¶
Accesor de memorie indexabil pe 8 biți.
mem8[addr]citește unintîn intervalul 0-255 din octetul de laaddr;mem8[addr] = valuescrie cei mai puțini semnificativi 8 biți aivalue.addrpoate fi orice adresă aliniată la octet.
- stm.mem16¶
Accesor de memorie indexabil pe 16 biți (halfword).
mem16[addr]citește unintîn intervalul 0-65535;mem16[addr] = valuescrie cei mai puțini semnificativi 16 biți.addrtrebuie să fie aliniat la 2 octeți.
- stm.mem32¶
Accesor de memorie indexabil pe 32 de biți (word).
mem32[addr]citește unintîn intervalul 0-0xFFFFFFFF;mem32[addr] = valuescrie cei mai puțini semnificativi 32 de biți.addrtrebuie să fie aliniat la 4 octeți.
Constante de registru ale perifericelor¶
Modulul stm expune setul complet de adrese și deplasamente de registru CMSIS pentru oricare familie STM32 pentru care a fost compilat firmware-ul. Numele oglindesc exact antetele CMSIS ale ST: STM32F427xx, STM32F765xx, STM32H743xx și STM32N657xx pe camerele OpenMV Cam din familiile M4, M7, H7 (H7 / H7 Plus / Pure Thermal) și, respectiv, N6. Setul complet de nume cuprinde câteva sute de simboluri pe familie (271 pe M4, 306 pe M7, 494 pe H7, 594 pe N6); enumerarea lor aici nu ar face decât să dubleze manualul de referință al ST și antetele CMSIS.
Se folosesc două convenții de denumire:
Constantele denumite după o instanță de periferic (
GPIOA,USART1,TIM2, …) sunt adrese de bază absolute.Constantele cu prefixul unui tip de periferic (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) sunt deplasamente de registru relative la baza corespunzătoare.
Adună o bază absolută cu un deplasament de registru pentru a obține adresa completă a unui singur registru. De exemplu, stm.GPIOA + stm.GPIO_BSRR este adresa absolută a GPIOA->BSRR.
Exemplu:
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
Constante reprezentative¶
Selecția de mai jos acoperă câte o intrare pentru fiecare categorie majoră de periferice, aleasă astfel încât convenția de denumire să fie clară dintr-o privire. Orice alt simbol CMSIS pentru ținta de compilare este de asemenea disponibil pe modul – vezi __getattr__() mai jos pentru soluția de rezervă a verificatorului de tipuri.
- stm.GPIOA: int¶
Adresa de bază a perifericului
GPIOA.GPIOB…GPIOK(intervalul depinde de capsula MCU-ului) urmează același tipar.
- stm.USART1: int¶
Adresa de bază a perifericului
USART1. Alte instanțe USART / UART sunt expuse subUSART2,USART3,UART4…, după disponibilitate.
- stm.SPI1: int¶
Adresa de bază a perifericului
SPI1. Instanțe SPI suplimentare apar caSPI2,SPI3, … până la numărul existent pe MCU.
- stm.TIM1: int¶
Adresa de bază a temporizatorului de control avansat
TIM1. Temporizatoarele de uz general și cele de bază (TIM2…TIM17, după disponibilitate) urmează aceeași denumire.
- stm.DMA1: int¶
Adresa de bază a
DMA1.DMA2este prezent pe majoritatea STM32-urilor; componentele din clasa H7 expun de asemeneaBDMA,MDMAși (pe N6)HPDMA/GPDMA.
- stm.EXTI: int¶
Adresa de bază a controlerului de întreruperi / evenimente externe (External Interrupt / Event Controller).
- stm.FLASH: int¶
Adresa de bază a controlerului de memorie flash încorporată (perifericul, nu matricea de memorie flash propriu-zisă).
- stm.SYSCFG: int¶
Adresa de bază a controlerului de configurare a sistemului (System Configuration Controller).
- stm.GPIO_BSRR: int¶
Deplasamentul registrului GPIO de setare/resetare a biților, în interiorul oricărei baze
GPIOx.
- stm.TIM_CCR1: int¶
Deplasamentul registrului de captură/comparare 1 al temporizatorului.
TIM_CCR2…TIM_CCR4urmează pe temporizatoarele care au mai multe canale.
- stm.__getattr__(name: str) int¶
Soluție de rezervă pentru atribute dinamice: orice simbol CMSIS expus de firmware care nu este listat individual mai sus (de exemplu
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, diversele deplasări și măști pentru câmpuri de biți, …) se rezolvă în continuare la adresa sau deplasamentul său absolut ca unint.Modulul în timpul execuției populează aceste simboluri direct în dicționarul său de variabile globale la momentul importului, așa că
__getattr__nu este niciodată apelat efectiv. Semnătura este expusă exclusiv pentru ca verificatoarele statice de tipuri (Pyright, Pylance, mypy) să acceptestm.<any CMSIS name>fără un diagnostic „module has no attribute”.