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 ».