مذكرات تطوير مكتبة HAL - DMA
DMA (Direct Memory Access) تسمح بالتواصل المباشر بين أجهزة الأجهزة ذات السرعات المختلفة بدون الحاجة للتكمنة الكبيرة لوحدة المعالجة المركزية (CPU).
المبادئ الأساسية
مفهوم DMA
يوفر DMA نقل البيانات بسرعة عالية بين الأجهزة الخارجية/الذاكرة أو الذاكرة/الذاكرة دون الحاجة إلى استهلاك موارد وحدة المعالجة المركزية.
كما هو موضح في الصورة أعلاه، تحتوي سلسلة STM32F4 على وحدتي تحكم DMA، مع مجموع 12 قناة (7 في DMA1 و 5 في DMA2). تشترك وحدات تحكم DMA مع النواة Cortex-M3 في نظام البيانات.
بشكل بسيط، عندما تكون وحدة المعالجة المركزية مشغولة في أداء مهمة أكبر أو تكون كسولة لنقل مجموعة كبيرة من البيانات إلى مكان آخر، يمكن أن تكلف وحدة التحكم DMA بهذه المهمة. وعندما تنتهي وحدة التحكم DMA من العمل أو تواجه مشكلة، يمكنها التبليغ لوحدة المعالجة المركزية.
سيناريوهات استخدام DMA
- التواصل عبر المنافذ المتسلسلة (UART): هذا هو الاستخدام الأكثر شيوعًا، عندما يتعين نقل كميات كبيرة من البيانات من أو إلى المنافذ المتسلسلة، يتم تفويض ذلك إلى DMA لتفريغ وحدة المعالجة المركزية والسماح لها بأداء المهام الأكثر أهمية.
- محول التناظر إلى رقم (ADC): عادة في وضع مسح القنوات عندما يتعين استخدام ADC، يمكن استخدام DMA للتعامل معه.
- قراءة وكتابة بطاقة الذاكرة SD: عند الحاجة إلى قراءة أو كتابة كميات كبيرة من البيانات إلى ومن بطاقة الذاكرة SD، غالبًا ما يتم استخدام DMA.
اتجاهات نقل DMA
- P2P (من الأجهزة الخارجية إلى الأجهزة الخارجية).
- P2M (من الأجهزة الخارجية إلى الذاكرة): عادة ما تستخدم لنقل البيانات من مستشعرات عبر المنافذ المتسلسلة إلى وحدة المعالجة المركزية.
- M2P (من الذاكرة إلى الأجهزة الخارجية): عادة ما تستخدم لنقل البيانات من وحدة المعالجة المركزية إلى أجهزة التنفيذ.
- M2M (من الذاكرة إلى الذاكرة): نقل البيانات داخل وحدة التحكم المركزية، وهو شائع في حالة نقل البيانات بين مخازن البيانات المؤقتة أو القراءة والكتابة من وإلى مخازن البيانات. فقط وحدة تحكم DMA2 قادرة على القيام بعمليات M2M.
أنماط نقل DMA
- DMA_Mode_Normal: وضع عادي. يتوقف DMA بعد الانتهاء من المهمة، وإذا كان هناك حاجة للمزيد من النقل، يجب بدء النقل يدوياً.
- DMA_Mode_Circular: وضع نقل دائري. عند الانتهاء من النقل، يتم إعادة تحميل مسجل كمية البيانات تلقائيًا من قبل العتاد لبدء دورة نقل بيانات جديدة.
مراجع دوال DMA الشائعة
إرسال البيانات عبر DMA لمنفذ السلسلة
الوظيفة: إرسال البيانات بالطريقة المباشرة عبر وحدة DMA لمنفذ السلسلة.
المعاملات:
- UART_HandleTypeDef *huart: اسم UART
الوظيفة: استئناف نقل DMA
القيم المعادة: 0 (جاري الاستئناف) ؛ 1 (اكتمل الاستئناف)
تجربة نقل المسلسلة باستخدام DMA
إعداد DMA داخل CubeMX
لإعداد الجزء المتعلق بالمسلسلة، يُرجى الانتقال إلى المقالة HAL ملاحظات تطوير المكتبة - اتصال المسلسل.
بعد إعداد مؤشرات USART والمقاطعات NVIC، قم بالتبديل إلى علامة تبويب DMA Settings
وقم بالتكوين وفقًا للصورة التالية:
- انقر فوق
Add
لإضافة قنوات (USART1_RX و USART1_TX). - ضبط أولويتيهما على
Medium
(أولوية متوسطة). - وضع نقل DMA على الوضع
Normal
(وضع عادي). - زيادة عنوان الذاكرة DMA تلقائيًا بمقدار بايت واحد في كل مرة.
ثم، في علامة تبويب System Core
، ابحث عن DMA
وأضف قسمًا جديدًا بعنوان MEMTOMEM
كما هو موضح في الصورة التالية:
تكوين DMA داخل الشيفرة
/* USER CODE BEGIN Init */
uint8_t Senbuff[] = "رسالة مخرجات المسلسل عبر DMA \r\n"; // سلسلة مخصصة للإرسال
/* USER CODE END Init */
......
/* USER CODE BEGIN 3 */
HAL_UART_Transmit_DMA(&huart1, (uint8_t *)Senbuff, sizeof(Senbuff));
HAL_Delay(1000);
}
/* USER CODE END 3 */
قم بتفليش البرنامج وافتح مساعد المسلسلة، سترى سلسلة مخصصة تُرسل بشكل متكرر.
الإشارات والشكر
- الجزء الأرتقاءي IV [DMA]
- 【STM32】HAL مكتبة STM32CubeMX Tutorial Eleven ---DMA (إرسال واستقبال DMA المسلسل)
عنوان النص: https://wiki-power.com/ يتم حماية هذا المقال بموجب اتفاقية CC BY-NC-SA 4.0، يُرجى ذكر المصدر عند إعادة النشر.