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.I2C1: int

عنوان أساس الطرفية I2C1. تتبع I2C2 ... I2C4.

stm.TIM1: int

عنوان أساس المؤقت متقدم التحكم TIM1. تتبع المؤقتات العامة الغرض والأساسية (TIM2 ... TIM17 حسب توافرها) التسمية نفسها.

stm.ADC1: int

عنوان أساس ADC1. تظهر ADC2 / ADC3 على المتحكمات الدقيقة ذات كتل ADC المتعددة.

stm.DAC: int

عنوان أساس طرفية DAC، على المتحكمات الدقيقة التي تحتوي على واحدة.

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

عنوان أساس متحكم ذاكرة الفلاش المدمجة (الطرفية، وليس مصفوفة الفلاش نفسها).

stm.SYSCFG: int

عنوان أساس متحكم تكوين النظام (System Configuration Controller).

stm.PWR: int

عنوان أساس طرفية التحكم في الطاقة (Power Control).

stm.GPIO_BSRR: int

إزاحة سجل ضبط/إعادة ضبط بتات 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

إزاحة سجل الالتقاط/المقارنة 1 للمؤقت. تتبع TIM_CCR2 ... TIM_CCR4 على المؤقتات ذات القنوات المتعددة.

stm.RCC_CR: int

إزاحة سجل التحكم في ساعة RCC.

stm.RCC_CFGR: int

إزاحة سجل تكوين ساعة RCC.

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".