stm — funcionalidad específica de los MCU STM32¶
Este módulo proporciona funcionalidad específica de los microcontroladores STM32, incluido el acceso directo a los registros de los periféricos.
Acceso a memoria¶
El módulo expone tres objetos indexables utilizados para el acceso a memoria sin procesar. Cada uno se comporta como una matriz dispersa indexada por dirección de byte: value = memN[addr] lee, memN[addr] = value escribe. La dirección siempre es una dirección de byte, independientemente del ancho de acceso.
Estos objetos de memoria pueden usarse en combinación con las constantes de registros de periféricos que se indican a continuación para leer y escribir registros de periféricos de hardware del MCU, así como cualquier otra ubicación del espacio de direcciones del SoC.
- stm.mem8¶
Accesor de memoria de 8 bits indexable.
mem8[addr]lee uninten el rango 0-255 del byte enaddr;mem8[addr] = valueescribe los 8 bits menos significativos devalue.addrpuede ser cualquier dirección alineada a byte.
- stm.mem16¶
Accesor de memoria de 16 bits (media palabra) indexable.
mem16[addr]lee uninten el rango 0-65535;mem16[addr] = valueescribe los 16 bits menos significativos.addrdebe estar alineado a 2 bytes.
- stm.mem32¶
Accesor de memoria de 32 bits (palabra) indexable.
mem32[addr]lee uninten el rango 0-0xFFFFFFFF;mem32[addr] = valueescribe los 32 bits menos significativos.addrdebe estar alineado a 4 bytes.
Constantes de registros de periféricos¶
El módulo stm expone el conjunto completo de direcciones y desplazamientos de registros CMSIS para la familia STM32 para la que se compiló el firmware. Los nombres reflejan exactamente los encabezados CMSIS de ST: STM32F427xx, STM32F765xx, STM32H743xx y STM32N657xx en las OpenMV Cam de las familias M4, M7, H7 (H7 / H7 Plus / Pure Thermal) y N6 respectivamente. El conjunto completo de nombres consta de varios cientos de símbolos por familia (271 en M4, 306 en M7, 494 en H7, 594 en N6); enumerarlos aquí simplemente duplicaría el manual de referencia de ST y los encabezados CMSIS.
Se utilizan dos convenciones de nomenclatura:
Las constantes nombradas según una instancia de periférico (
GPIOA,USART1,TIM2, …) son direcciones base absolutas.Las constantes con el prefijo de un tipo de periférico (
GPIO_BSRR,USART_CR1,TIM_CCR1, …) son desplazamientos de registro relativos a la base correspondiente.
Sume una base absoluta y un desplazamiento de registro para obtener la dirección completa de un único registro. Por ejemplo, stm.GPIOA + stm.GPIO_BSRR es la dirección absoluta de GPIOA->BSRR.
Ejemplo:
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 representativas¶
La selección siguiente cubre una entrada por cada categoría principal de periféricos, escogida de modo que la convención de nomenclatura quede clara a primera vista. Todos los demás símbolos CMSIS para el destino de compilación también están disponibles en el módulo; consulte __getattr__() más abajo para el mecanismo de respaldo del comprobador de tipos.
- stm.GPIOA: int¶
Dirección base del periférico
GPIOA.GPIOB…GPIOK(el rango depende del encapsulado del MCU) siguen el mismo patrón.
- stm.USART1: int¶
Dirección base del periférico
USART1. Otras instancias de USART / UART se exponen comoUSART2,USART3,UART4… según disponibilidad.
- stm.SPI1: int¶
Dirección base del periférico
SPI1. Las instancias SPI adicionales aparecen comoSPI2,SPI3, … hasta el número que tenga el MCU.
- stm.TIM1: int¶
Dirección base del temporizador de control avanzado
TIM1. Los temporizadores de propósito general y básicos (TIM2…TIM17según disponibilidad) siguen la misma nomenclatura.
- stm.DMA1: int¶
Dirección base de
DMA1.DMA2está presente en la mayoría de los STM32; las piezas de clase H7 también exponenBDMA,MDMAy (en la N6)HPDMA/GPDMA.
- stm.FLASH: int¶
Dirección base del controlador de la memoria flash integrada (el periférico, no la propia matriz flash).
- stm.GPIO_BSRR: int¶
Desplazamiento del registro de set/reset de bits del GPIO dentro de cualquier base
GPIOx.
- stm.TIM_CCR1: int¶
Desplazamiento del registro de captura/comparación 1 del temporizador.
TIM_CCR2…TIM_CCR4le siguen en los temporizadores que tienen varios canales.
- stm.__getattr__(name: str) int¶
Mecanismo de respaldo de atributos dinámicos: cualquier símbolo CMSIS expuesto por el firmware que no esté listado individualmente más arriba (por ejemplo,
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, los diversos desplazamientos y máscaras de campos de bits, …) sigue resolviéndose a su dirección absoluta o desplazamiento como unint.El módulo en tiempo de ejecución rellena estos símbolos directamente en su diccionario de globales en el momento de la importación, por lo que
__getattr__nunca se invoca realmente. La firma se expone únicamente para que los comprobadores estáticos de tipos (Pyright, Pylance, mypy) aceptenstm.<any CMSIS name>sin un diagnóstico de «el módulo no tiene atributo».