stm — fonctionnalités spécifiques aux microcontrôleurs STM32

Ce module fournit des fonctionnalités spécifiques aux microcontrôleurs STM32, y compris l’accès direct aux registres des périphériques.

Accès mémoire

Le module expose trois objets indexables utilisés pour l’accès mémoire brut. Chacun se comporte comme un tableau creux indexé par adresse d’octet : value = memN[addr] lit, memN[addr] = value écrit. L’adresse est toujours une adresse d’octet, quelle que soit la largeur d’accès.

Ces objets mémoire peuvent être utilisés en combinaison avec les constantes de registres de périphériques ci-dessous pour lire et écrire les registres des périphériques matériels du microcontrôleur, ainsi que tout autre emplacement de l’espace d’adressage du SoC.

stm.mem8

Accesseur mémoire 8 bits indexable. mem8[addr] lit un int dans la plage 0-255 à partir de l’octet situé à addr ; mem8[addr] = value écrit les 8 bits de poids faible de value. addr peut être n’importe quelle adresse alignée sur un octet.

stm.mem16

Accesseur mémoire 16 bits (demi-mot) indexable. mem16[addr] lit un int dans la plage 0-65535 ; mem16[addr] = value écrit les 16 bits de poids faible. addr doit être aligné sur 2 octets.

stm.mem32

Accesseur mémoire 32 bits (mot) indexable. mem32[addr] lit un int dans la plage 0-0xFFFFFFFF ; mem32[addr] = value écrit les 32 bits de poids faible. addr doit être aligné sur 4 octets.

Constantes de registres de périphériques

Le module stm expose l’ensemble complet des adresses et décalages de registres CMSIS pour la famille STM32 pour laquelle le micrologiciel a été compilé. Les noms reflètent exactement les en-têtes CMSIS de ST : STM32F427xx, STM32F765xx, STM32H743xx et STM32N657xx sur les OpenMV Cams des familles M4, M7, H7 (H7 / H7 Plus / Pure Thermal) et N6 respectivement. L’ensemble complet des noms comprend plusieurs centaines de symboles par famille (271 sur M4, 306 sur M7, 494 sur H7, 594 sur N6) ; les énumérer ici reviendrait simplement à dupliquer le manuel de référence et les en-têtes CMSIS de ST.

Deux conventions de nommage sont utilisées :

  • Les constantes nommées d’après une instance de périphérique (GPIOA, USART1, TIM2, …) sont des adresses de base absolues.

  • Les constantes préfixées par un type de périphérique (GPIO_BSRR, USART_CR1, TIM_CCR1, …) sont des décalages de registre relatifs à la base correspondante.

Additionnez une base absolue et un décalage de registre pour obtenir l’adresse complète d’un registre unique. Par exemple, stm.GPIOA + stm.GPIO_BSRR est l’adresse absolue de GPIOA->BSRR.

Exemple

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

Constantes représentatives

La sélection ci-dessous couvre une entrée par grande catégorie de périphériques, choisie de manière à ce que la convention de nommage soit claire d’un coup d’œil. Tous les autres symboles CMSIS pour la cible de compilation sont également disponibles sur le module – voir __getattr__() ci-dessous pour la solution de repli du vérificateur de types.

stm.GPIOA: int

Adresse de base du périphérique GPIOA. GPIOBGPIOK (la plage dépend du boîtier du microcontrôleur) suivent le même modèle.

stm.USART1: int

Adresse de base du périphérique USART1. Les autres instances USART / UART sont exposées sous USART2, USART3, UART4 … selon disponibilité.

stm.SPI1: int

Adresse de base du périphérique SPI1. Des instances SPI supplémentaires apparaissent sous SPI2, SPI3, … jusqu’au nombre du microcontrôleur.

stm.I2C1: int

Adresse de base du périphérique I2C1. I2C2I2C4 suivent.

stm.TIM1: int

Adresse de base du minuteur de contrôle avancé TIM1. Les minuteurs à usage général et basiques (TIM2TIM17 selon disponibilité) suivent le même nommage.

stm.ADC1: int

Adresse de base de ADC1. ADC2 / ADC3 apparaissent sur les microcontrôleurs disposant de plusieurs blocs ADC.

stm.DAC: int

Adresse de base du périphérique DAC, sur les microcontrôleurs qui en possèdent un.

stm.DMA1: int

Adresse de base de DMA1. DMA2 est présent sur la plupart des STM32 ; les composants de classe H7 exposent également BDMA, MDMA et (sur le N6) HPDMA / GPDMA.

stm.RCC: int

Adresse de base du périphérique de contrôle de réinitialisation et d’horloge (Reset and Clock Control).

stm.EXTI: int

Adresse de base du contrôleur d’interruptions / événements externes (External Interrupt / Event Controller).

stm.FLASH: int

Adresse de base du contrôleur de mémoire flash embarqué (le périphérique, et non le réseau de mémoire flash lui-même).

stm.SYSCFG: int

Adresse de base du contrôleur de configuration système (System Configuration Controller).

stm.PWR: int

Adresse de base du périphérique de contrôle de l’alimentation (Power Control).

stm.GPIO_BSRR: int

Décalage du registre de mise à 1/à 0 des bits GPIO au sein de n’importe quelle base GPIOx.

stm.GPIO_IDR: int

Décalage du registre de données d’entrée GPIO.

stm.GPIO_ODR: int

Décalage du registre de données de sortie GPIO.

stm.USART_CR1: int

Décalage du registre de contrôle 1 USART/UART.

stm.TIM_CR1: int

Décalage du registre de contrôle 1 du minuteur.

stm.TIM_CCR1: int

Décalage du registre de capture/comparaison 1 du minuteur. TIM_CCR2TIM_CCR4 suivent sur les minuteurs disposant de plusieurs canaux.

stm.RCC_CR: int

Décalage du registre de contrôle d’horloge RCC.

stm.RCC_CFGR: int

Décalage du registre de configuration d’horloge RCC.

stm.__getattr__(name: str) int

Solution de repli pour les attributs dynamiques : tout symbole CMSIS exposé par le micrologiciel qui n’est pas listé individuellement ci-dessus (par exemple stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, les divers décalages et masques de champs de bits, …) se résout toujours en son adresse absolue ou son décalage sous forme d”int.

Le module à l’exécution remplit ces symboles directement dans son dictionnaire de variables globales au moment de l’import, donc __getattr__ n’est en réalité jamais invoqué. La signature est exposée uniquement pour que les vérificateurs de types statiques (Pyright, Pylance, mypy) acceptent stm.<any CMSIS name> sans diagnostic « module has no attribute ».