stm — funkcionalnost specifična za STM32 MCU-ove

Ovaj modul omogućuje funkcionalnost specifičnu za STM32 mikrokontrolere, uključujući izravan pristup registrima periferije.

Pristup memoriji

Modul izlaže tri indeksirana objekta koja se koriste za izravan pristup memoriji. Svaki se ponaša poput rijetkog polja indeksiranog adresom bajta: value = memN[addr] čita, memN[addr] = value piše. Adresa je uvijek adresa bajta, neovisno o širini pristupa.

Ovi memorijski objekti mogu se koristiti u kombinaciji s konstantama registara periferije navedenima u nastavku za čitanje i pisanje hardverskih registara periferije MCU-a, kao i bilo koje druge lokacije u adresnom prostoru SoC-a.

stm.mem8

Indeksirani 8-bitni pristupnik memoriji. mem8[addr] čita int u rasponu 0-255 iz bajta na addr; mem8[addr] = value piše donjih 8 bitova vrijednosti value. addr može biti bilo koja adresa poravnata na bajt.

stm.mem16

Indeksirani 16-bitni (poluriječni) pristupnik memoriji. mem16[addr] čita int u rasponu 0-65535; mem16[addr] = value piše donjih 16 bitova. addr mora biti poravnat na 2 bajta.

stm.mem32

Indeksirani 32-bitni (riječni) pristupnik memoriji. mem32[addr] čita int u rasponu 0-0xFFFFFFFF; mem32[addr] = value piše donjih 32 bita. addr mora biti poravnat na 4 bajta.

Konstante registara periferije

Modul stm izlaže potpuni skup CMSIS adresa registara i pomaka za onu STM32 obitelj za koju je ugrađeni program (firmware) bio preveden. Imena točno zrcale ST-ove CMSIS zaglavlja: STM32F427xx, STM32F765xx, STM32H743xx i STM32N657xx na M4, M7, H7 obitelji (H7 / H7 Plus / Pure Thermal) odnosno N6 OpenMV Cam kamerama. Potpuni skup imena iznosi nekoliko stotina simbola po obitelji (271 na M4, 306 na M7, 494 na H7, 594 na N6); njihovo nabrajanje ovdje samo bi duplo ponovilo ST-ov referentni priručnik i CMSIS zaglavlja.

Koriste se dvije konvencije imenovanja:

  • Konstante nazvane po instanci periferije (GPIOA, USART1, TIM2, …) su apsolutne bazne adrese.

  • Konstante s prefiksom tipa periferije (GPIO_BSRR, USART_CR1, TIM_CCR1, …) su pomaci registara u odnosu na odgovarajuću bazu.

Zbrojite apsolutnu bazu i pomak registra kako biste dobili punu adresu pojedinačnog registra. Na primjer stm.GPIOA + stm.GPIO_BSRR je apsolutna adresa GPIOA->BSRR.

Primjer:

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

Reprezentativne konstante

Donji odabir pokriva po jedan unos za svaku glavnu kategoriju periferije, biran tako da konvencija imenovanja bude jasna na prvi pogled. Svaki drugi CMSIS simbol za ciljnu kompilaciju također je dostupan u modulu – pogledajte __getattr__() u nastavku za rezervno ponašanje pri provjeri tipova.

stm.GPIOA: int

Bazna adresa periferije GPIOA. GPIOBGPIOK (raspon ovisi o pakiranju MCU-a) slijede isti obrazac.

stm.USART1: int

Bazna adresa periferije USART1. Druge USART / UART instance izložene su pod USART2, USART3, UART4 … ovisno o dostupnosti.

stm.SPI1: int

Bazna adresa periferije SPI1. Dodatne SPI instance pojavljuju se kao SPI2, SPI3, … do broja koji MCU podržava.

stm.I2C1: int

Bazna adresa periferije I2C1. I2C2I2C4 slijede.

stm.TIM1: int

Bazna adresa naprednog upravljačkog mjerača vremena TIM1. Mjerači vremena opće namjene i osnovni mjerači vremena (TIM2TIM17 ovisno o dostupnosti) slijede isto imenovanje.

stm.ADC1: int

Bazna adresa ADC1. ADC2 / ADC3 pojavljuju se na MCU-ovima s više ADC blokova.

stm.DAC: int

Bazna adresa DAC periferije, na MCU-ovima koji je imaju.

stm.DMA1: int

Bazna adresa DMA1. DMA2 je prisutan na većini STM32-ova; dijelovi klase H7 također izlažu BDMA, MDMA i (na N6) HPDMA / GPDMA.

stm.RCC: int

Bazna adresa periferije Reset and Clock Control.

stm.EXTI: int

Bazna adresa upravljača vanjskih prekida / događaja (External Interrupt / Event Controller).

stm.FLASH: int

Bazna adresa upravljača ugrađene flash memorije (periferije, ne samog polja flash memorije).

stm.SYSCFG: int

Bazna adresa upravljača konfiguracije sustava (System Configuration Controller).

stm.PWR: int

Bazna adresa periferije Power Control.

stm.GPIO_BSRR: int

Pomak registra za postavljanje/poništavanje bita GPIO-a unutar bilo koje baze GPIOx.

stm.GPIO_IDR: int

Pomak ulaznog podatkovnog registra GPIO-a.

stm.GPIO_ODR: int

Pomak izlaznog podatkovnog registra GPIO-a.

stm.USART_CR1: int

Pomak USART/UART upravljačkog registra 1.

stm.TIM_CR1: int

Pomak upravljačkog registra 1 mjerača vremena.

stm.TIM_CCR1: int

Pomak registra za hvatanje/usporedbu 1 mjerača vremena. TIM_CCR2TIM_CCR4 slijede na mjeračima vremena koji imaju više kanala.

stm.RCC_CR: int

Pomak RCC registra upravljanja taktom.

stm.RCC_CFGR: int

Pomak RCC registra konfiguracije takta.

stm.__getattr__(name: str) int

Rezervno ponašanje za dinamičke atribute: svaki CMSIS simbol koji izlaže ugrađeni program (firmware), a koji nije pojedinačno naveden gore (npr. stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, razni pomaci i maske bitnih polja, …) i dalje se razrješava u svoju apsolutnu adresu ili pomak kao int.

Modul tijekom izvođenja popunjava te simbole izravno u svoj globalni rječnik (globals) prilikom uvoza, pa se __getattr__ zapravo nikada ne poziva. Potpis je izložen isključivo kako bi statički provjerivači tipova (Pyright, Pylance, mypy) prihvatili stm.<any CMSIS name> bez dijagnostike „module has no attribute”.