آخر مرة أتقنا فيها إنشاء مشروع جديد باستخدام STM CubeMX ، يمكن العثور على الجزء الأول
هنا.بالنسبة لأولئك الذين هم كسولون للغاية لإعادة قراءتها - انتهى الأمر كله بحقيقة أن المشروع الفارغ تم تجميعه بنجاح.

في هذا الجزء ، سنقوم بكتابة أبسط مثال Hello World على HAL ، ومعرفة كيفية تشغيل مصحح الأخطاء واستخدامه ، ولنكتشف مقدار الذاكرة التي يأكلها برنامجنا ، والتي سيتم كتابتها في هذا الجزء باللغة HAL.
نحن نأخذ كأساس نفس المشروع الفارغ الذي تمت تهيئته في الجزء الأخير.
من أجل وميض مؤشر LED - نحتاج إلى الالتزام بالخوارزمية التالية:
- اضبط الحالة المعكوسة على الحالة الحالية على الساق المتحكم. وهذا هو ، كان هناك 0 - مجموعة 1 ، كان هناك 1 - مجموعة 0 ، وهلم جرا.
- انتظر N للحصول على عدد من microseconds والعودة إلى الخطوة 1.
من أجل الوفاء بالنقطة الأولى ، نحتاج إلى إخبار المترجم بأي طرف أو منفذ متصل بمؤشر LED وأي وظيفة لعكس حالته.
أولاً نجد أين وصلنا الصمام.
في الملف main.c ، مباشرة بعد التعليقات التمهيدية التي أرسلتها الشركة ST إلينا ، يوجد خط لتوصيل ملف الرأس main.h

انقر بزر الماوس الأيمن فوق هذا السطر وابحث عن العنصر "الإعلان المفتوح"

بالضغط عليه ، سننتقل إلى ملف main.h
أين تجد لدينا أسماء وأسماء المنافذ المعلنة.

تذكر ، في الجزء الأول ، عند تهيئة إخراج LED PC13 ، ملأنا حقل تسمية المستخدم ودخلنا CLOCK_LED هناك؟
عند إنشاء المشروع ، تراعي STM32CubeMX رغباتنا ، والآن بدلاً من GPIO_PIN_13 و GPIOC المجردين ، يمكننا الوصول إلى LED من خلال CLOCK_LED_Pin و CLOCK_LED_Pin الأكثر وضوحًا و CLOCK_LED_GPIO_Port.
مع ذلك - ما سوف نديره - برزت.
الآن نحن نبحث عن وظيفة يمكن أن تغير حالة GPIO لدينا إلى عكس ذلك.
للقيام بذلك ، في شجرة المشروع على الجانب الأيسر من الشاشة - ابحث عن الملف:
Drivers -> STM32F1xx_HAL_Driver -> Inc -> stm32f1xx_hal_gpio.h
يحتوي على الكثير من الأشياء ، لكننا نحتاج إلى وصف للوظائف التي تدخل في / * Exported Jobs / / block
العثور على وظيفة هناك
void HAL_GPIO_TogglePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);
هذا هو بالضبط ما نحتاجه.

لكي تومض LED باستمرار ، من الضروري وضع نداء وظيفتنا بشكل رئيسي في جسم حلقة البرنامج الرئيسية.
ومن أجل التمييز بين يومض - أضف بعد ذلك تأخيرًا باستخدام دالة HAL_Delay (500) ؛
في هذه الحالة ، سيكون التأخير 500 مللي ثانية.

بالمناسبة ، يتم وصف دالة HAL_Delay أيضًا في
Drivers -> STM32F1xx_HAL_Driver -> Inc
فقط في ملف stm32f1xx_hal.h
هذا هو ، ل وميض LED - كنا بحاجة لكتابة فقط 2 أسطر من التعليمات البرمجية.
إذا فعلنا كل شيء بشكل صحيح ، يمكنك محاولة تشغيل مصحح الأخطاء ومعرفة كيفية تشغيل البرنامج.


يمكنك التنقل من خلال رمز البرنامج باستخدام أزرار F5 و F6
في الوقت نفسه ، لا يعمل زر F6 إلا على المكالمات الوظيفية ، ويسمح لك الزر F5 بإدخال الوظيفة المدعومة ومعرفة ما يحدث بداخله.

الشيء الوحيد إذا كنت لا ترغب في التقاط مواطن الخلل أثناء تصحيح الأخطاء هو أنصحك بإيقاف تشغيل التحسين. يتم ذلك من خلال مشروع القائمة -> الخصائص
يجب تعيين قيمة مستوى التحسين إلى بلا (-O0)

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

لتلخيص
استخدام HAL سمح لنا بتنفيذ هذه المهمة عن طريق كتابة سطرين فقط من التعليمات البرمجية.
ولكن كان علي أن أدفع للتبسيط

1.54 كيلوبايت من ذاكرة الوصول العشوائي و 4.69 كيلوبايت من الفلاش.
اسمحوا لي أن أذكركم بأن التحسين معطل ، أي "-O0"
هل هو كثير أم قليلا؟
لا يمكن الإجابة عن هذا السؤال بثقة إلا في الأجزاء التالية من المقالة.
المقال الأصلي موجود على
مدونتي كما هو الحال دائمًا.