stm — STM32 MCU에 특화된 기능¶
이 모듈은 주변장치 레지스터에 대한 직접 접근을 포함하여 STM32 마이크로컨트롤러에 특화된 기능을 제공합니다.
메모리 접근¶
이 모듈은 원시 메모리 접근에 사용되는 세 개의 첨자 접근 가능 객체를 노출합니다. 각각은 바이트 주소로 인덱싱되는 희소 배열처럼 동작합니다. value = memN[addr]는 읽기, memN[addr] = value는 쓰기입니다. 주소는 접근 폭에 관계없이 항상 바이트 주소입니다.
이 메모리 객체들은 아래의 주변장치 레지스터 상수와 함께 사용하여 MCU 하드웨어 주변장치 레지스터뿐만 아니라 SoC 주소 공간 내의 다른 모든 위치를 읽고 쓸 수 있습니다.
- stm.mem8¶
첨자 접근 가능한 8비트 메모리 접근자입니다.
mem8[addr]는addr의 바이트에서 0-255 범위의int를 읽고,mem8[addr] = value는value의 하위 8비트를 씁니다.addr는 임의의 바이트 정렬 주소일 수 있습니다.
- stm.mem16¶
첨자 접근 가능한 16비트(하프워드) 메모리 접근자입니다.
mem16[addr]는 0-65535 범위의int를 읽고,mem16[addr] = value는 하위 16비트를 씁니다.addr는 2바이트로 정렬되어야 합니다.
- stm.mem32¶
첨자 접근 가능한 32비트(워드) 메모리 접근자입니다.
mem32[addr]는 0-0xFFFFFFFF 범위의int를 읽고,mem32[addr] = value는 하위 32비트를 씁니다.addr는 4바이트로 정렬되어야 합니다.
주변장치 레지스터 상수¶
stm 모듈은 펌웨어가 컴파일된 STM32 제품군에 대한 CMSIS 레지스터 주소 및 오프셋 전체 집합을 노출합니다. 이름은 ST의 CMSIS 헤더를 정확히 반영합니다. M4, M7, H7 제품군(H7 / H7 Plus / Pure Thermal) 및 N6 OpenMV Cam에 각각 STM32F427xx, STM32F765xx, STM32H743xx, STM32N657xx입니다. 전체 이름 집합은 제품군당 수백 개의 심볼입니다(M4에 271개, M7에 306개, H7에 494개, N6에 594개). 여기에 이를 모두 나열하는 것은 단순히 ST의 참조 매뉴얼과 CMSIS 헤더를 중복하는 일이 될 것입니다.
두 가지 명명 규칙이 사용됩니다:
주변장치 인스턴스의 이름을 딴 상수(
GPIOA,USART1,TIM2, …)는 절대 기본 주소입니다.주변장치 유형이 접두사로 붙은 상수(
GPIO_BSRR,USART_CR1,TIM_CCR1, …)는 해당 기본 주소를 기준으로 한 레지스터 오프셋입니다.
절대 기본 주소와 레지스터 오프셋을 더하면 단일 레지스터의 전체 주소를 얻을 수 있습니다. 예를 들어 stm.GPIOA + stm.GPIO_BSRR는 GPIOA->BSRR의 절대 주소입니다.
예제:
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
대표 상수¶
아래 선택 항목은 명명 규칙을 한눈에 명확히 알 수 있도록 주요 주변장치 범주별로 한 항목씩 다룹니다. 빌드 대상에 대한 다른 모든 CMSIS 심볼도 모듈에서 사용할 수 있습니다. 타입 검사기 폴백에 대해서는 아래의 __getattr__()을 참조하세요.
- stm.USART1: int¶
USART1주변장치의 기본 주소입니다. 다른 USART / UART 인스턴스는 사용 가능한 경우USART2,USART3,UART4…로 노출됩니다.
- stm.DMA1: int¶
DMA1의 기본 주소입니다.DMA2는 대부분의 STM32에 존재하며, H7급 부품은BDMA,MDMA와 (N6의 경우)HPDMA/GPDMA도 노출합니다.
- stm.__getattr__(name: str) int¶
동적 속성 폴백: 위에 개별적으로 나열되지 않은, 펌웨어가 노출하는 모든 CMSIS 심볼(예:
stm.FDCAN1,stm.OCTOSPI1,stm.GPIO_AFR, 다양한 비트 필드 시프트 및 마스크 등)도 여전히int로서의 절대 주소 또는 오프셋으로 해석됩니다.런타임 모듈은 가져오기 시점에 이러한 심볼을 자신의 globals 딕셔너리에 직접 채우므로
__getattr__은 실제로 호출되지 않습니다. 이 시그니처는 정적 타입 검사기(Pyright, Pylance, mypy)가 “module has no attribute” 진단 없이stm.<any CMSIS name>을 허용하도록 하기 위해서만 노출됩니다.