جدول المحتويات:

لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx): 5 خطوات
لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx): 5 خطوات

فيديو: لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx): 5 خطوات

فيديو: لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx): 5 خطوات
فيديو: STM32F4 Programming in C 5- Accelerometer coding in Keil using STM32CubeMx 2024, شهر نوفمبر
Anonim
لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx)
لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx)
لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx)
لوحة اكتشاف STM32F4 و Python USART Communication (STM32CubeMx)

أهلا! سنحاول في هذا البرنامج التعليمي إنشاء اتصال USART بين STM32F4 ARM MCU و Python (يمكن استبداله بأي لغة أخرى). لذلك دعونا نبدأ:)

الخطوة 1: متطلبات البرامج والأجهزة

من حيث الأجهزة التي تحتاجها:

  • لوحة اكتشاف STM32F4 (أو أي لوحة STM32 أخرى)
  • USB لتحويل TTL

من حيث البرمجيات:

  • STM32CubeMX
  • كايل uVision5
  • بايثون مع مكتبة تسلسلية مثبتة

الخطوة 2: تكوين STM32CubeMX

أولاً ، دعنا نفهم ما نريد القيام به. نريد نقل البيانات إلى اللوحة من Python عبر USART والتحقق مما إذا كانت لدينا بيانات صحيحة وقيادة التبديل. لذلك ، نحتاج إلى تمكين USART و Led.

  • قم بتمكين USART2 من علامة تبويب الاتصال.

    • تغيير الوضع إلى Asynchoronous
    • معدل الباود إلى 9600 بت / ثانية
    • طول الكلمة إلى 8 بت بدون تماثل
    • لا يوجد بت التكافؤ
    • من إعدادات DMA أضف USART2_RX في الوضع الدائري
    • من إعدادات NVIC ، قم بتمكين المقاطعة العامة USART2
  • قم بتمكين LED بالنقر فوق PD12

ثم قم بإنشاء رمز:)

الخطوة 3: Keil Software Development

#يشمل

#يشمل

ستكون هناك حاجة إلى هذه المكتبات في عمليات السلسلة ولتحديد المتغير المنطقي.

/ * رمز المستخدم BEGIN 2 * / HAL_UART_Receive_DMA (& huart2، (uint8_t *) data_buffer، 1)؛ / * نهاية رمز المستخدم 2 * /

هنا ، بدأت استقبال UART مع DMA.

/ * USER CODE BEGIN 4 * / void HAL_UART_RxCpltCallback (UART_HandleTypeDef * huart) {/ * منع تحذير تجميع الوسيطة (الوسائط) غير المستخدمة * / UNUSED (huart) ؛ / * ملاحظة: لا ينبغي تعديل هذه الوظيفة ، عند الحاجة إلى رد الاتصال ، يمكن تنفيذ HAL_UART_RxCpltCallback في ملف المستخدم * / if (data_buffer [0]! = '\ n') {data_full [index_] = data_buffer [0] ؛ فهرس _ ++ ؛ } آخر {index_ = 0 ؛ انتهى = 1 ؛ } // HAL_UART_Transmit (& huart2، data_buffer، 1، 10) ؛ } / * نهاية رمز المستخدم 4 * /

هذا هو ISR الذي يتم تنشيطه عندما نحصل على بايت واحد من الحرف. وبالتالي. نحصل على هذا البايت ونكتبه إلى data_full الذي يحتوي على البيانات الكاملة المستلمة حتى نحصل على '\ n'. عندما نحصل على "\ n" نقوم بعمل العلم النهائي 1 وفي أثناء الحلقة:

while (1) {/ * USER CODE END WHILE * / if (finish) {if (strcmp (data_full، cmp_) == 0) {HAL_GPIO_TogglePin (GPIOD، GPIO_PIN_12) ؛ } memset (data_full، '\ 0'، strlen (data_full)) ؛ انتهى = 0 ؛ } آخر {_NOP () ؛ } / * رمز المستخدم يبدأ 3 * /}

إذا كانت العلامة النهائية عالية ، فنحن نقارن محتويات البيانات والبيانات المستلمة الكاملة التي نرغب فيها ، وإذا كانت متساوية ، فسنقوم بالتبديل. بعد ذلك نقوم بمسح العلامة النهائية وانتظار البيانات الجديدة وكذلك مسح مصفوفة data_full حتى لا يتم الكتابة فوق المصفوفة.

الخطوة 4: تطوير برمجيات بايثون

لذا ، نريد هنا إرسال رقمنا مع '/ n' في النهاية ، لأن برنامج Keil سيحتاج إلى رؤيته لمعرفة النهاية.

استيراد المسلسل

ser = serial. Serial ('COM17') # تحقق من هذا المنفذ على جهازك من إدارة الأجهزة

ser.write (b'24 / n ')

يجب أن ترى أن LED يبدل في كل مرة ترسل فيها "24 / n". إذا قمت بإرسال أي شيء آخر فلن يؤثر ذلك عليه.

الخطوة 5: الخاتمة

لقد وصلنا إلى نهاية البرنامج التعليمي. إذا كان لديك أي مشكلة أو سؤال فلا تتردد في طرحها. سأحاول المساعدة بقدر ما أستطيع. شكرا جزيلا:)

موصى به: