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