stm — STM32-mikro-ohjaimille ominaiset toiminnot

Tämä moduuli tarjoaa STM32-mikro-ohjaimille ominaisia toimintoja, mukaan lukien suoran pääsyn oheislaitteiden rekistereihin.

Muistinkäyttö

Moduuli paljastaa kolme indeksoitavaa objektia raakaa muistinkäyttöä varten. Kukin käyttäytyy kuin harva taulukko, joka indeksoidaan tavuosoitteella: value = memN[addr] lukee, memN[addr] = value kirjoittaa. Osoite on aina tavuosoite riippumatta käytön leveydestä.

Näitä muistiobjekteja voidaan käyttää yhdessä alla olevien oheislaitteiden rekisterivakioiden kanssa MCU:n laitteisto-oheislaitteiden rekisterien lukemiseen ja kirjoittamiseen sekä minkä tahansa muun SoC:n osoiteavaruuden sijainnin käsittelyyn.

stm.mem8

Indeksoitava 8-bittinen muistinkäyttöobjekti. mem8[addr] lukee int-arvon väliltä 0–255 tavusta osoitteessa addr; mem8[addr] = value kirjoittaa value-arvon alimmat 8 bittiä. addr voi olla mikä tahansa tavukohdistettu osoite.

stm.mem16

Indeksoitava 16-bittinen (puolisana) muistinkäyttöobjekti. mem16[addr] lukee int-arvon väliltä 0–65535; mem16[addr] = value kirjoittaa alimmat 16 bittiä. addr on kohdistettava 2 tavuun.

stm.mem32

Indeksoitava 32-bittinen (sana) muistinkäyttöobjekti. mem32[addr] lukee int-arvon väliltä 0–0xFFFFFFFF; mem32[addr] = value kirjoittaa alimmat 32 bittiä. addr on kohdistettava 4 tavuun.

Oheislaitteiden rekisterivakiot

stm-moduuli paljastaa täyden joukon CMSIS-rekisteriosoitteita ja -siirtymiä sille STM32-perheelle, jolle laiteohjelmisto käännettiin. Nimet vastaavat tarkalleen ST:n CMSIS-otsikkotiedostoja: STM32F427xx, STM32F765xx, STM32H743xx ja STM32N657xx M4-, M7-, H7-perheen (H7 / H7 Plus / Pure Thermal) ja N6 OpenMV Cam -laitteilla. Koko nimijoukko on useita satoja symboleja perhettä kohden (271 M4:llä, 306 M7:llä, 494 H7:llä, 594 N6:lla); niiden luetteleminen tässä yksinkertaisesti toistaisi ST:n viiteoppaan ja CMSIS-otsikkotiedostot.

Käytössä on kaksi nimeämiskäytäntöä:

  • Oheislaiteinstanssin mukaan nimetyt vakiot (GPIOA, USART1, TIM2, …) ovat absoluuttisia perusosoitteita.

  • Oheislaitetyypin etuliitteellä varustetut vakiot (GPIO_BSRR, USART_CR1, TIM_CCR1, …) ovat rekisterisiirtymiä suhteessa vastaavaan perusosoitteeseen.

Laske yhteen absoluuttinen perusosoite ja rekisterisiirtymä saadaksesi yksittäisen rekisterin täyden osoitteen. Esimerkiksi stm.GPIOA + stm.GPIO_BSRR on GPIOA->BSRR-rekisterin absoluuttinen osoite.

Esimerkki:

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

Edustavat vakiot

Alla oleva valikoima kattaa yhden merkinnän kutakin pääoheislaiteryhmää kohden, valittuna siten, että nimeämiskäytäntö on selkeä yhdellä silmäyksellä. Jokainen muukin käännöskohteen CMSIS-symboli on myös käytettävissä moduulissa – katso __getattr__() alta tyypintarkistimen varatoiminto.

stm.GPIOA: int

GPIOA-oheislaitteen perusosoite. GPIOBGPIOK (väli riippuu MCU:n kotelosta) noudattavat samaa kaavaa.

stm.USART1: int

USART1-oheislaitteen perusosoite. Muut USART-/UART-instanssit paljastetaan nimillä USART2, USART3, UART4 … saatavuuden mukaan.

stm.SPI1: int

SPI1-oheislaitteen perusosoite. Lisä-SPI-instanssit näkyvät nimillä SPI2, SPI3, … MCU:n lukumäärään asti.

stm.I2C1: int

I2C1-oheislaitteen perusosoite. I2C2I2C4 seuraavat.

stm.TIM1: int

TIM1-edistyneen ohjausajastimen perusosoite. Yleiskäyttöiset ja perusajastimet (TIM2TIM17 saatavuuden mukaan) noudattavat samaa nimeämistä.

stm.ADC1: int

ADC1:n perusosoite. ADC2 / ADC3 näkyvät MCU:issa, joissa on useita ADC-lohkoja.

stm.DAC: int

DAC-oheislaitteen perusosoite niissä MCU:issa, joissa sellainen on.

stm.DMA1: int

DMA1:n perusosoite. DMA2 on läsnä useimmissa STM32:ssa; H7-luokan osat paljastavat myös BDMA-, MDMA- ja (N6:lla) HPDMA / GPDMA -toiminnot.

stm.RCC: int

Reset and Clock Control -oheislaitteen perusosoite.

stm.EXTI: int

External Interrupt / Event Controller -ohjaimen perusosoite.

stm.FLASH: int

Sulautetun flash-ohjaimen perusosoite (oheislaite, ei itse flash-muistitaulukko).

stm.SYSCFG: int

System Configuration Controller -ohjaimen perusosoite.

stm.PWR: int

Power Control -oheislaitteen perusosoite.

stm.GPIO_BSRR: int

GPIO:n bit set/reset -rekisterin siirtymä minkä tahansa GPIOx-perusosoitteen sisällä.

stm.GPIO_IDR: int

GPIO:n syötetietorekisterin siirtymä.

stm.GPIO_ODR: int

GPIO:n tulostietorekisterin siirtymä.

stm.USART_CR1: int

USART/UART-ohjausrekisterin 1 siirtymä.

stm.TIM_CR1: int

Ajastimen ohjausrekisterin 1 siirtymä.

stm.TIM_CCR1: int

Ajastimen kaappaus-/vertailurekisterin 1 siirtymä. TIM_CCR2TIM_CCR4 seuraavat ajastimissa, joissa on useita kanavia.

stm.RCC_CR: int

RCC:n kellonohjausrekisterin siirtymä.

stm.RCC_CFGR: int

RCC:n kellonkonfigurointirekisterin siirtymä.

stm.__getattr__(name: str) int

Dynaamisen attribuutin varatoiminto: mikä tahansa laiteohjelmiston paljastama CMSIS-symboli, jota ei ole erikseen lueteltu yllä (esim. stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, erilaiset bittikentän siirrot ja maskit, …), ratkeaa silti absoluuttiseksi osoitteekseen tai siirtymäkseen int-tyyppisenä.

Ajonaikainen moduuli täyttää nämä symbolit suoraan globaalimuuttujien sanakirjaansa tuontihetkellä, joten __getattr__ ei koskaan todellisuudessa tule kutsutuksi. Allekirjoitus paljastetaan ainoastaan, jotta staattiset tyypintarkistimet (Pyright, Pylance, mypy) hyväksyvät stm.<any CMSIS name> ilman ”module has no attribute” -varoitusta.