stm --- ฟังก์ชันการทำงานเฉพาะสำหรับ MCU STM32

โมดูลนี้ให้ฟังก์ชันการทำงานเฉพาะสำหรับไมโครคอนโทรลเลอร์ STM32 รวมถึงการเข้าถึงรีจิสเตอร์ของอุปกรณ์ต่อพ่วงโดยตรง

การเข้าถึงหน่วยความจำ

โมดูลนี้เปิดเผยออบเจ็กต์ที่สามารถ subscript ได้สามรายการสำหรับการเข้าถึงหน่วยความจำดิบ แต่ละรายการทำงานเหมือนอาร์เรย์แบบกระจายที่ indexed ด้วยที่อยู่ไบต์: value = memN[addr] อ่าน, memN[addr] = value เขียน ที่อยู่เสมอเป็นที่อยู่ไบต์โดยไม่คำนึงถึงความกว้างของการเข้าถึง

ออบเจ็กต์หน่วยความจำเหล่านี้สามารถใช้ร่วมกับค่าคงที่รีจิสเตอร์ของอุปกรณ์ต่อพ่วงด้านล่างเพื่ออ่านและเขียนรีจิสเตอร์ฮาร์ดแวร์ของ MCU รวมถึงที่อยู่อื่น ๆ ในพื้นที่ที่อยู่ของ SoC

stm.mem8

ตัวเข้าถึงหน่วยความจำ 8 บิตแบบ subscriptable mem8[addr] อ่าน int ในช่วง 0-255 จากไบต์ที่ addr; mem8[addr] = value เขียน 8 บิตต่ำของ value addr อาจเป็นที่อยู่ที่ aligned กับไบต์ใด ๆ

stm.mem16

ตัวเข้าถึงหน่วยความจำ 16 บิต (halfword) แบบ subscriptable mem16[addr] อ่าน int ในช่วง 0-65535; mem16[addr] = value เขียน 16 บิตต่ำ addr ต้อง aligned กับ 2 ไบต์

stm.mem32

ตัวเข้าถึงหน่วยความจำ 32 บิต (word) แบบ subscriptable mem32[addr] อ่าน int ในช่วง 0-0xFFFFFFFF; mem32[addr] = value เขียน 32 บิตต่ำ addr ต้อง aligned กับ 4 ไบต์

ค่าคงที่รีจิสเตอร์ของอุปกรณ์ต่อพ่วง

โมดูล stm เปิดเผยชุดที่อยู่และ offset รีจิสเตอร์ CMSIS ครบชุดสำหรับตระกูล STM32 ที่คอมไพล์เฟิร์มแวร์ ชื่อสะท้อน header CMSIS ของ ST อย่างแน่นอน: STM32F427xx, STM32F765xx, STM32H743xx และ STM32N657xx บน OpenMV Cam ตระกูล M4, M7, H7 (H7 / H7 Plus / Pure Thermal) และ N6 ตามลำดับ ชุดชื่อทั้งหมดมีหลายร้อยสัญลักษณ์ต่อตระกูล (271 บน M4, 306 บน M7, 494 บน H7, 594 บน N6) การระบุทั้งหมดที่นี่จะเป็นการซ้ำซ้อนกับคู่มืออ้างอิงและ header CMSIS ของ ST

ใช้รูปแบบการตั้งชื่อสองแบบ:

  • ค่าคงที่ที่ตั้งชื่อตามอินสแตนซ์ของอุปกรณ์ต่อพ่วง (GPIOA, USART1, TIM2, ...) คือ ที่อยู่ฐานสัมบูรณ์

  • ค่าคงที่ที่มีคำนำหน้าด้วยประเภทอุปกรณ์ต่อพ่วง (GPIO_BSRR, USART_CR1, TIM_CCR1, ...) คือ offset รีจิสเตอร์ สัมพัทธ์กับฐานที่ตรงกัน

เพิ่มที่อยู่ฐานสัมบูรณ์และ offset รีจิสเตอร์เพื่อรับที่อยู่เต็มของรีจิสเตอร์เดียว ตัวอย่างเช่น 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 อื่น ๆ ทุกอย่างสำหรับ build target ยังมีอยู่บนโมดูล -- ดู __getattr__() ด้านล่างสำหรับ type-checker fallback

stm.GPIOA: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง GPIOA GPIOB ... GPIOK (ช่วงขึ้นอยู่กับแพ็คเกจ MCU) ใช้รูปแบบเดียวกัน

stm.USART1: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง USART1 อินสแตนซ์ USART / UART อื่น ๆ จะเปิดเผยภายใต้ USART2, USART3, UART4 ... ตามที่มีให้

stm.SPI1: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง SPI1 อินสแตนซ์ SPI เพิ่มเติมจะปรากฏเป็น SPI2, SPI3, ... จนถึงจำนวนที่ MCU รองรับ

stm.I2C1: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง I2C1 I2C2 ... I2C4 ตามมา

stm.TIM1: int

ที่อยู่ฐานของตัวจับเวลาควบคุมขั้นสูง TIM1 ตัวจับเวลาทั่วไปและพื้นฐาน (TIM2 ... TIM17 ตามที่มีให้) ใช้รูปแบบการตั้งชื่อเดียวกัน

stm.ADC1: int

ที่อยู่ฐานของ ADC1 ADC2 / ADC3 จะปรากฏบน MCU ที่มีบล็อก ADC หลายตัว

stm.DAC: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง DAC บน MCU ที่มีให้

stm.DMA1: int

ที่อยู่ฐานของ DMA1 DMA2 มีอยู่บน STM32 ส่วนใหญ่ ชิ้นส่วนคลาส H7 ยังเปิดเผย BDMA, MDMA และ (บน N6) HPDMA / GPDMA

stm.RCC: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง Reset and Clock Control

stm.EXTI: int

ที่อยู่ฐานของ External Interrupt / Event Controller

stm.FLASH: int

ที่อยู่ฐานของตัวควบคุม flash ที่ฝังไว้ (อุปกรณ์ต่อพ่วง ไม่ใช่อาร์เรย์ flash เอง)

stm.SYSCFG: int

ที่อยู่ฐานของ System Configuration Controller

stm.PWR: int

ที่อยู่ฐานของอุปกรณ์ต่อพ่วง Power Control

stm.GPIO_BSRR: int

Offset ของรีจิสเตอร์ bit set/reset ของ GPIO ภายในฐาน GPIOx ใด ๆ

stm.GPIO_IDR: int

Offset ของรีจิสเตอร์ข้อมูลอินพุต GPIO

stm.GPIO_ODR: int

Offset ของรีจิสเตอร์ข้อมูลเอาต์พุต GPIO

stm.USART_CR1: int

Offset ของรีจิสเตอร์ควบคุม USART/UART 1

stm.TIM_CR1: int

Offset ของรีจิสเตอร์ควบคุมตัวจับเวลา 1

stm.TIM_CCR1: int

Offset ของรีจิสเตอร์ capture/compare ของตัวจับเวลา 1 TIM_CCR2 ... TIM_CCR4 ตามมาบนตัวจับเวลาที่มีหลายช่องสัญญาณ

stm.RCC_CR: int

Offset ของรีจิสเตอร์ควบคุมนาฬิกา RCC

stm.RCC_CFGR: int

Offset ของรีจิสเตอร์การกำหนดค่านาฬิกา RCC

stm.__getattr__(name: str) int

Dynamic-attribute fallback: สัญลักษณ์ CMSIS ใด ๆ ที่เปิดเผยโดยเฟิร์มแวร์ซึ่งไม่ได้ระบุไว้ข้างต้นแยกต่างหาก (เช่น stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, การ shift และ mask ของ bit-field ต่าง ๆ ...) ยังคง resolve เป็นที่อยู่สัมบูรณ์หรือ offset เป็น int

โมดูล runtime จะเติมสัญลักษณ์เหล่านี้โดยตรงลงใน globals dict ของมันตอน import time ดังนั้น __getattr__ จึงไม่ถูกเรียกใช้จริง ๆ signature ถูกเปิดเผยเพื่อให้ static type checker (Pyright, Pylance, mypy) ยอมรับ stm.<any CMSIS name> โดยไม่มีข้อความแจ้งเตือน "module has no attribute"