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 unintdans la plage 0-255 à partir de l’octet situé àaddr;mem8[addr] = valueécrit les 8 bits de poids faible devalue.addrpeut être n’importe quelle adresse alignée sur un octet.
- stm.mem16#
Accesseur mémoire 16 bits (demi-mot) indexable.
mem16[addr]lit unintdans la plage 0-65535 ;mem16[addr] = valueécrit les 16 bits de poids faible.addrdoit être aligné sur 2 octets.
- stm.mem32#
Accesseur mémoire 32 bits (mot) indexable.
mem32[addr]lit unintdans la plage 0-0xFFFFFFFF ;mem32[addr] = valueécrit les 32 bits de poids faible.addrdoit ê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.GPIOB…GPIOK(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 sousUSART2,USART3,UART4… selon disponibilité.
- stm.SPI1: int#
Adresse de base du périphérique
SPI1. Des instances SPI supplémentaires apparaissent sousSPI2,SPI3, … jusqu’au nombre du microcontrôleur.
- stm.TIM1: int#
Adresse de base du minuteur de contrôle avancé
TIM1. Les minuteurs à usage général et basiques (TIM2…TIM17selon disponibilité) suivent le même nommage.
- stm.ADC1: int#
Adresse de base de
ADC1.ADC2/ADC3apparaissent sur les microcontrôleurs disposant de plusieurs blocs ADC.
- stm.DMA1: int#
Adresse de base de
DMA1.DMA2est présent sur la plupart des STM32 ; les composants de classe H7 exposent égalementBDMA,MDMAet (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.GPIO_BSRR: int#
Décalage du registre de mise à 1/à 0 des bits GPIO au sein de n’importe quelle base
GPIOx.
- stm.TIM_CCR1: int#
Décalage du registre de capture/comparaison 1 du minuteur.
TIM_CCR2…TIM_CCR4suivent sur les minuteurs disposant de plusieurs canaux.
- 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) acceptentstm.<any CMSIS name>sans diagnostic « module has no attribute ».