انتقل إلى المحتوى

مذكرات تطوير مكتبة HAL - التواصل عبر المنفذ التسلسلي

تعتمد هذه المقالة على مجموعة تطوير RobotCtrl الخاصة بنا، حيث يتم استخدام النواة المدمجة في المتحكم STM32F407ZET6 وشريحة SP3232EEN للاتصال RS-232. يمكنك العثور على المخطط الأساسي والمعلومات التفصيلية في RobotCtrl - مجموعة تطوير STM32 العامة.

المبادئ الأساسية

لفهم المبادئ الأساسية للتواصل عبر المنفذ التسلسلي، يُفضل قراءة المقالة بروتوكولات الاتصال - التواصل عبر المنفذ التسلسلي.

تجربة التواصل عبر المنفذ التسلسلي

قبل البدء في التجارب القادمة، يتعين عليك تكوين معلومات مثل التنزيل عبر المنفذ وتكوين الساعة وغيرها في CubeMX. لمزيد من التفاصيل حول الخطوات المحددة، يُفضل مراجعة المقالة مذكرات تطوير مكتبة HAL - تكوين البيئة.

تكوين المنفذ داخل CubeMX

CubeMX

وفقًا للمخطط الأساسي، المنفذ الذي سنستخدمه في تجربة التواصل هو USART1 ويُمثلهم PA9 وPA10. لذا، يتعين عليك أولاً تكوين هذين السنتين كوظيفة إرسال واستقبال لمنفذ USART1 داخل CubeMX. بعد ذلك، انتقل إلى علامة USART1 في الجانب الأيسر وحدد الوضع (Mode) كونه غير متزامن (Asynchronous) وقم بتعديل معلمات مثل معدل الباود (Baud Rate) وغيرها على الجانب السفلي كما يلي:

CubeMX

التفاصيل عن المعلمات:

  • إعدادات معدل الباود (Baud Rate): ليس هناك معدل باود واحد يعمل بشكل جيد في جميع الحالات، لذا يجب تعديله وفقًا للحالة الفعلية لضمان التوافق مع مساعد تصحيح التواصل عبر المنفذ.
  • عدد البتات في الكلمة (Word Length): إذا تم تمكين التحقق من الزوجية/الفردية، سيتم خصم بت واحد عن البيانات الفعلية.
  • التحقق من الزوجية/الفردية (Parity): يمكن اختيار التحقق من الزوجية أو الفردية أو عدم التحقق.
  • عدد بتات التوقف (Stop Bits): تُستخدم بتين إضافيين كإشارة للإنتهاء من الإرسال أو الاستقبال.
  • اتجاه البيانات (Data Direction): يمكن اختيار وضع الإرسال فقط أو الاستقبال فقط أو وضع الإرسال والاستقبال معًا.
  • معدل العينة الزائدة (Over Sampling): يُستخدم معدل العينة الزائدة 8 مرات أو 16 مرة لتجنب الأخطاء في البيانات.

أخيرًا، تمكين انقطاع المنفذ السلسلي USART1 داخل علامة NVIC، كما هو موضح في الصورة:

CubeMX

تكوين المنفذ في الشيفرة

أولاً، يجب إضافة الشيفرة التالية إلى نهاية الملف stm32f4xx_it.c:

````c title="stm32f4xx_it.c

main.c
/* المتغيرات الخاصة -----------------------------------------------------------*/
/* USER CODE BEGIN PV */

uint8_t aTxBuffer[] = "اختبار USART\r\n"; // سلسلة تُرسل
uint8_t aRxBuffer[20]; // سلسلة تُستقبل

/* USER CODE END PV */
````

```c title="stm32f4xx_it.c"
/* المتغيرات الخاصة -----------------------------------------------------------*/
/* USER CODE BEGIN PV */

extern uint8_t aTxBuffer;
extern uint8_t aRxBuffer;

/* USER CODE END PV */

وبالإضافة إلى ذلك، في ملف main.c، نحتاج إلى إضافة دالة تمكين انقطاع الاستقبال بعد تهيئة المنفذ التسلسلي قبل دورة البرنامج الرئيسية:

main.c
/* USER CODE BEGIN 2 */

HAL_UART_Receive_IT(&huart1, (uint8_t *)aRxBuffer, 1); // دالة تمكين انقطاع الاستقبال

/* USER CODE END 2 */

يمكنك أيضًا إرسال رسالة تهيئة للإشارة إلى أن المنفذ التسلسلي قد تم تشغيله:

main.c
/* USER CODE BEGIN 2 */

HAL_UART_Transmit(&huart1, (uint8_t*) aTxBuffer, sizeof(aTxBuffer) - 1, 0xFFFF); // إرسال محتوى aTxBuffer المُخصص سابقًا

/* USER CODE END 2 */

إذا كنت بحاجة إلى إعادة توجيه دالة printf (استخدام دالة printf في STM32 لإخراج البيانات عبر المنفذ التسلسلي)، يُرجى الرجوع إلى إعادة توجيه STM32CubeIDE للمنفذ التسلسلي (printf) وإخراج الأعدادات العائمة للمزيد من المعلومات.

التنزيل والتحقق

بعد نجاح تنفيذ البرنامج، افتح أداة المساعدة للمنفذ التسلسلي وقم بتكوين المنفذ وسرعة الباود.

عند الاتصال بالمنفذ التسلسلي، ستقوم أولاً بطباعة محتوى aTxBuffer، ثم ستقوم بإعادة طباعة المحتوى الذي تم استقباله في aRxBuffer. يمكنك الرؤية في الصورة أدناه:

المراجع والشكر

عنوان النص: https://wiki-power.com/ يتم حماية هذا المقال بموجب اتفاقية CC BY-NC-SA 4.0، يُرجى ذكر المصدر عند إعادة النشر.

تمت ترجمة هذه المشاركة باستخدام ChatGPT، يرجى تزويدنا بتعليقاتكم إذا كانت هناك أي حذف أو إهمال.