stm --- وظائف خاصة بمتحكمات STM32¶
توفر هذه الوحدة وظائف خاصة بمتحكمات STM32 الدقيقة، بما في ذلك الوصول المباشر إلى سجلات الطرفيات.
الوصول إلى الذاكرة¶
تكشف الوحدة عن ثلاثة كائنات قابلة للفهرسة تُستخدم للوصول الخام إلى الذاكرة. يتصرف كل منها كمصفوفة متناثرة مفهرسة بعنوان البايت: value = memN[addr] يقرأ، وmemN[addr] = value يكتب. العنوان دائماً عنوان بايت، بغض النظر عن عرض الوصول.
يمكن استخدام كائنات الذاكرة هذه مع ثوابت سجلات الطرفيات أدناه لقراءة وكتابة سجلات طرفيات أجهزة المتحكم الدقيق، إضافة إلى أي موقع آخر في مساحة عناوين الـ SoC.
- stm.mem8¶
موصّل ذاكرة 8 بت قابل للفهرسة.
mem8[addr]يقرأintفي المدى 0-255 من البايت عندaddr؛ وmem8[addr] = valueيكتب الـ 8 بت السفلية منvalue. يمكن أن يكونaddrأي عنوان محاذٍ للبايت.
- stm.mem16¶
موصّل ذاكرة 16 بت (نصف كلمة) قابل للفهرسة.
mem16[addr]يقرأintفي المدى 0-65535؛ وmem16[addr] = valueيكتب الـ 16 بت السفلية. يجب أن يكونaddrمحاذياً لبايتين.
- stm.mem32¶
موصّل ذاكرة 32 بت (كلمة) قابل للفهرسة.
mem32[addr]يقرأintفي المدى 0-0xFFFFFFFF؛ وmem32[addr] = valueيكتب الـ 32 بت السفلية. يجب أن يكونaddrمحاذياً لأربعة بايتات.
ثوابت سجلات الطرفيات¶
تكشف وحدة 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(يعتمد المدى على حزمة المتحكم الدقيق) النمط نفسه.
- stm.USART1: int¶
عنوان أساس الطرفية
USART1. تُكشف نسخ USART / UART الأخرى تحتUSART2وUSART3وUART4... حسب توافرها.
- stm.SPI1: int¶
عنوان أساس الطرفية
SPI1. تظهر نسخ SPI الإضافية كـSPI2وSPI3... حتى عدد المتحكم الدقيق.
- stm.TIM1: int¶
عنوان أساس المؤقت متقدم التحكم
TIM1. تتبع المؤقتات العامة الغرض والأساسية (TIM2...TIM17حسب توافرها) التسمية نفسها.
- stm.DMA1: int¶
عنوان أساس
DMA1. توجدDMA2على معظم متحكمات STM32؛ كما تكشف الأجزاء من فئة H7 عنBDMAوMDMAو(على N6)HPDMA/GPDMA.
- stm.TIM_CCR1: int¶
إزاحة سجل الالتقاط/المقارنة 1 للمؤقت. تتبع
TIM_CCR2...TIM_CCR4على المؤقتات ذات القنوات المتعددة.
- stm.__getattr__(name: str) int¶
الرجوع إلى السمة الديناميكي: أي رمز CMSIS تكشفه البرامج الثابتة وغير مدرج بشكل منفرد أعلاه (مثل
stm.FDCAN1وstm.OCTOSPI1وstm.GPIO_AFRومختلف إزاحات وأقنعة حقول البتات ...) لا يزال يُحَلّ إلى عنوانه المطلق أو إزاحته على شكلint.تملأ الوحدة في وقت التشغيل هذه الرموز مباشرة في قاموس متغيراتها العامة عند الاستيراد، لذا لا يُستدعى
__getattr__فعلياً أبداً. والتوقيع مكشوف فقط حتى تقبل مدققات الأنواع الساكنة (Pyright وPylance وmypy)stm.<any CMSIS name>دون تشخيص "module has no attribute".