stm — פונקציונליות ספציפית למיקרו-בקרי STM32

מודול זה מספק פונקציונליות ספציפית למיקרו-בקרי STM32, כולל גישה ישירה לאוגרים של התקנים היקפיים.

גישה לזיכרון

המודול חושף שלושה אובייקטים ניתנים לאינדוקס המשמשים לגישה גולמית לזיכרון. כל אחד מתנהג כמו מערך דליל הממופתח לפי כתובת בית: value = memN[addr] קורא, memN[addr] = value כותב. הכתובת היא תמיד כתובת בית, ללא קשר לרוחב הגישה.

ניתן להשתמש באובייקטי זיכרון אלה בשילוב עם קבועי אוגרי ההתקנים ההיקפיים שלהלן כדי לקרוא ולכתוב אוגרי חומרה של התקנים היקפיים ב-MCU, וכן בכל מיקום אחר במרחב הכתובות של ה-SoC.

stm.mem8

מגשר זיכרון 8-ביט הניתן לאינדוקס. mem8[addr] קורא int בטווח 0-255 מהבית בכתובת addr; mem8[addr] = value כותב את 8 הביטים התחתונים של value. addr יכול להיות כל כתובת מיושרת-בית.

stm.mem16

מגשר זיכרון 16-ביט (halfword) הניתן לאינדוקס. mem16[addr] קורא int בטווח 0-65535; mem16[addr] = value כותב את 16 הביטים התחתונים. addr חייב להיות מיושר ל-2 בתים.

stm.mem32

מגשר זיכרון 32-ביט (word) הניתן לאינדוקס. mem32[addr] קורא int בטווח 0-0xFFFFFFFF; mem32[addr] = value כותב את 32 הביטים התחתונים. addr חייב להיות מיושר ל-4 בתים.

קבועי אוגרים של התקנים היקפיים

המודול stm חושף את הסט המלא של כתובות והיסטים של אוגרי CMSIS עבור משפחת STM32 שעבורה הקושחה הודרה. השמות משקפים בדיוק את כותרות ה-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); מנייתם כאן תשכפל פשוט את מדריך העזר של 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.GPIOA: int

כתובת הבסיס של ההתקן ההיקפי GPIOA. GPIOBGPIOK (הטווח תלוי במארז ה-MCU) עוקבים אחר אותו דפוס.

stm.USART1: int

כתובת הבסיס של ההתקן ההיקפי USART1. מופעי USART / UART אחרים נחשפים תחת USART2, USART3, UART4 … ככל שזמינים.

stm.SPI1: int

כתובת הבסיס של ההתקן ההיקפי SPI1. מופעי SPI נוספים מופיעים כ-SPI2, SPI3, … עד למספר של ה-MCU.

stm.I2C1: int

כתובת הבסיס של ההתקן ההיקפי I2C1. I2C2I2C4 עוקבים.

stm.TIM1: int

כתובת הבסיס של הטיימר advanced-control TIM1. טיימרים כלליים ובסיסיים (TIM2TIM17 ככל שזמינים) עוקבים אחר אותה שיטת שמות.

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

ההיסט של אוגר ה-set/reset של ביטי GPIO בתוך כל בסיס GPIOx.

stm.GPIO_IDR: int

ההיסט של אוגר נתוני הקלט של GPIO.

stm.GPIO_ODR: int

ההיסט של אוגר נתוני הפלט של GPIO.

stm.USART_CR1: int

ההיסט של אוגר הבקרה 1 של USART/UART.

stm.TIM_CR1: int

ההיסט של אוגר הבקרה 1 של הטיימר.

stm.TIM_CCR1: int

ההיסט של אוגר ה-capture/compare 1 של הטיימר. TIM_CCR2TIM_CCR4 עוקבים בטיימרים שיש להם ערוצים מרובים.

stm.RCC_CR: int

ההיסט של אוגר בקרת השעון של RCC.

stm.RCC_CFGR: int

ההיסט של אוגר תצורת השעון של RCC.

stm.__getattr__(name: str) int

חלופת תכונה דינמית: כל סמל CMSIS שנחשף על ידי הקושחה ואינו רשום בנפרד לעיל (למשל stm.FDCAN1, stm.OCTOSPI1, stm.GPIO_AFR, ה-shifts וה-masks השונים של שדות הביטים, …) עדיין מתפענח לכתובת המוחלטת או להיסט שלו כ-int.

מודול ה-runtime ממלא סמלים אלה ישירות לתוך מילון ה-globals שלו בזמן הייבוא, כך ש-__getattr__ לעולם אינו נקרא בפועל. החתימה נחשפת אך ורק כדי שבודקי טיפוסים סטטיים (Pyright, Pylance, mypy) יקבלו stm.<any CMSIS name> ללא אבחנת ”module has no attribute“.