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.GPIOB…GPIOK(הטווח תלוי במארז ה-MCU) עוקבים אחר אותו דפוס.
- stm.USART1: int¶
כתובת הבסיס של ההתקן ההיקפי
USART1. מופעי USART / UART אחרים נחשפים תחתUSART2,USART3,UART4… ככל שזמינים.
- stm.SPI1: int¶
כתובת הבסיס של ההתקן ההיקפי
SPI1. מופעי SPI נוספים מופיעים כ-SPI2,SPI3, … עד למספר של ה-MCU.
- stm.TIM1: int¶
כתובת הבסיס של הטיימר advanced-control
TIM1. טיימרים כלליים ובסיסיים (TIM2…TIM17ככל שזמינים) עוקבים אחר אותה שיטת שמות.
- stm.DMA1: int¶
כתובת הבסיס של
DMA1.DMA2קיים ברוב ה-STM32; חלקים ממחלקת H7 חושפים גםBDMA,MDMAו-(ב-N6)HPDMA/GPDMA.
- stm.TIM_CCR1: int¶
ההיסט של אוגר ה-capture/compare 1 של הטיימר.
TIM_CCR2…TIM_CCR4עוקבים בטיימרים שיש להם ערוצים מרובים.
- 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“.