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 บิตต่ำของvalueaddrอาจเป็นที่อยู่ที่ 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¶
ที่อยู่ฐานของอุปกรณ์ต่อพ่วง
GPIOAGPIOB...GPIOK(ช่วงขึ้นอยู่กับแพ็คเกจ MCU) ใช้รูปแบบเดียวกัน
- stm.USART1: int¶
ที่อยู่ฐานของอุปกรณ์ต่อพ่วง
USART1อินสแตนซ์ USART / UART อื่น ๆ จะเปิดเผยภายใต้USART2,USART3,UART4... ตามที่มีให้
- stm.SPI1: int¶
ที่อยู่ฐานของอุปกรณ์ต่อพ่วง
SPI1อินสแตนซ์ SPI เพิ่มเติมจะปรากฏเป็นSPI2,SPI3, ... จนถึงจำนวนที่ MCU รองรับ
- stm.TIM1: int¶
ที่อยู่ฐานของตัวจับเวลาควบคุมขั้นสูง
TIM1ตัวจับเวลาทั่วไปและพื้นฐาน (TIM2...TIM17ตามที่มีให้) ใช้รูปแบบการตั้งชื่อเดียวกัน
- stm.DMA1: int¶
ที่อยู่ฐานของ
DMA1DMA2มีอยู่บน STM32 ส่วนใหญ่ ชิ้นส่วนคลาส H7 ยังเปิดเผยBDMA,MDMAและ (บน N6)HPDMA/GPDMA
- stm.TIM_CCR1: int¶
Offset ของรีจิสเตอร์ capture/compare ของตัวจับเวลา 1
TIM_CCR2...TIM_CCR4ตามมาบนตัวจับเวลาที่มีหลายช่องสัญญาณ
- 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"