مقدمة صغيرة
ذات مرة ، عندما سافرت إلى الشقة المستأجرة التالية ، واجهت إزعاجًا معينًا ، كان مزعجًا تمامًا: كان مفتاح الضوء في الغرفة الرئيسية خلف جدار خزانة ، والذي تم تثبيته على الحائط ، وكان ترتيبه مستحيلًا لأن استغرق الأمر الكثير من الوقت والجهد. كنت أرغب في حل هذه المشكلة كثيرًا وتبادر إلى ذهني فكرة واحدة: إنشاء جهاز تحكم عن بعد للتحكم في الإضاءة!
مع فكرة إنشاء جهاز التحكم عن بعد الخاص بي للتحكم في الضوء في الغرفة ، بدأ شغفي بالإلكترونيات وأجهزة التحكم الدقيقة وأجهزة الراديو المختلفة.
قائمة المقالات:
- بدء دراسة STM32 أو إدارة الضوء بذكاء
- الشروع في العمل STM32: عمليات البت
- الشروع في العمل STM32: ما هي السجلات؟ كيف تعمل معهم؟
بعد ذلك ، بدأت في دراسة هذا الموضوع ، والتعرف على أساسيات الإلكترونيات ، وأمثلة على الأجهزة ، ومعرفة كيفية تنفيذ الأشخاص لهذه الأجهزة. بعد البحث عن معلومات حول كيفية بدء دراسة المتحكمات الدقيقة ، اكتشفت ماهية Arduino ، وما الذي تأكله ، وكيفية العمل معها. كان الحل السهل يبدو جذابًا جدًا ، لأنه بقدر ما فهمت في ذلك الوقت ، سيتم بناء الرمز مرة أو مرتين. ولكن بعد أن خلصت إلى أنني لم أكن أعرف ما الذي يحدث داخل وحدة التحكم الدقيقة خارج إطار رسومات Arduino ، قررت البحث عن خيار أكثر إثارة للاهتمام ، والذي ينطوي على دراسة عميقة وانغماس في غابة تكنولوجيا الميكروكونترولر.
لدى الشركة التي أعمل فيها قسم تطوير ، وقررت الاتصال بالمهندسين لتوجيهي إلى المسار الصحيح وإظهار أين أبدأ في حل مشكلتي. لقد أحبطت بشدة من دراسة Arduino وكان لدي في يدي وشاح أخضر غير معروف وغير مفهوم يوجد عليه نقوش ورسائل ومكونات إلكترونية مختلفة.
بدا كل هذا بالنسبة لي في تلك اللحظة معقدًا بشكل غير مفهوم ، حتى أنني توصلت إلى بعض الارتباك ، لكنني لن أرفض تنفيذ المهمة. لذلك تعرفت على عائلة STM32 من المتحكمات الدقيقة ولوحة STM32F0-Discovery ، بعد الدراسة التي أرغب في تكديس جهازي للأغراض التي أحتاجها.
لدهشتي الكبيرة ، لم يكن مثل هذا المجتمع الكبير ، والمقالات ، والأمثلة ، والمواد المختلفة على STM بنفس الوفرة كما هو الحال مع Arduino. بالطبع ، إذا بحثت ، فهناك العديد من المقالات "للمبتدئين" التي تصف كيف وأين تبدأ. ولكن في تلك اللحظة بدا لي أن كل هذا معقد للغاية ، والعديد من التفاصيل التي كانت مثيرة للاهتمام لعقل مبتدئ متسائل ، لم يتم إخبار الأشياء. على الرغم من أن العديد من المقالات وصفت بأنها "التعلم للأصغر" ، إلا أنه لم يكن من الممكن دائمًا تحقيق النتيجة المرجوة بمساعدتهم ، حتى مع أمثلة التعليمات البرمجية الجاهزة. لهذا السبب قررت كتابة سلسلة قصيرة من المقالات حول البرمجة على STM32 في ضوء تنفيذ فكرة محددة: لوحة تحكم في الإضاءة في الغرفة.
لماذا لا AVR / Arduino؟
توقع التصريحات التي تشير إلى أنه سيكون من السابق لأوانه أن يندفع مبتدئ قليل الخبرة إلى دراسة عضو معقد مثل عضو الكنيست المعقد مثل STM32 على الفور - سأخبرك لماذا قررت الذهاب بهذه الطريقة دون الدخول إلى عائلة معالج Atmel والتعرف عليها ولا حتى اعتبار Arduino كخيار .
أولاً ، لعبت العلاقة السعرية الوظيفية دورًا حاسمًا ، والفرق واضح حتى بين واحد من أرخص وأبسط أعضاء الكنيست من ST و ATMega "الدهنية" بدلاً من ذلك:
بعد أن رأيت اختلافات كبيرة بين سعر وقدرات AVR و STM32 - قررت أنني لن أستخدم AVR في تطوري =)
ثانيًا ، حاولت من قبل أن أحدد بنفسي مجموعة المهارات التي كنت سأكتسبها عندما أصل إلى النتيجة المرجوة. في حال قررت استخدام Arduino - سيكون كافياً بالنسبة لي نسخ المكتبات النهائية ، ووضعها على رسم تخطيطي وفويل. لكن فهمًا لكيفية عمل الحافلات الرقمية ، وكيف يعمل جهاز الإرسال اللاسلكي ، وكيف يتم تكوينه واستخدامه بالكامل - في هذه الحالة ، لم أكن لأصل أبدًا. بالنسبة لي ، اخترت المسار الأصعب والشائك ، بحيث أنني على الطريق لتحقيق النتيجة - سأحصل على أقصى قدر من الخبرة والمعرفة.
ثالثًا ، يمكن استبدال أي STM32 بـ STM32 آخر ، ولكن بميزات أفضل. علاوة على ذلك ، دون تغيير دائرة التبديل.
رابعاً ، من المرجح أن يستخدم المطورون المحترفون MKs 32 بت ، وغالباً ما تكون هذه النماذج من NXP و Texas Instruments و ST Microelectronics. نعم ، ويمكنني في أي وقت الذهاب إلى المهندسين الخاصين بي من قسم التطوير ومعرفة كيفية حل مشكلة معينة والحصول على المشورة بشأن القضايا التي تهمني.
لماذا تبدأ في استكشاف وحدات التحكم الدقيقة STM32 باستخدام لوحة Discovery؟
كما فهمت بالفعل ، سوف نبدأ التعرف على متحكم STM32 ، القراء الأعزاء ، ودراستنا باستخدام لوحة Discovery. لماذا الاكتشاف وليس مجلسها الخاص؟
- على أي لوحة Discovery ، يوجد مبرمج / مصحح أخطاء ST-LINK مدمج يتصل بالكمبيوتر عبر USB ويمكن استخدامه لبرمجة وحدة التحكم الدقيقة على اللوحة والأجهزة الخارجية عن طريق إزالة / تثبيت وصلات العبور المقابلة. هذا هو ، بالإضافة إلى كل شيء - نحن أيضًا نوفر المال من خلال الحصول على حل ثنائي في واحد: متحكم دقيق ومبرمج.
- تحتوي بطاقات Discovery على توصيلات كاملة لجميع المسامير مباشرةً من وحدة التحكم الدقيقة إلى مسامير اللوحة. من أجل الراحة ، علقت Discovery في نفس لوحتي النماذج.
- 3. يوجد على اللوح دائمًا عدد معين من جميع أنواع الأجهزة الطرفية ، على سبيل المثال ، مثل أجهزة قياس التسارع والميكروفونات والشاشات وأجهزة الاستشعار وغيرها الكثير. تحتوي لوحات Discovery المختلفة على خيارات طقم جسم مختلفة. إذا كان أي شخص مهتمًا ، يمكنك قراءة المزيد على موقع الشركة المصنعة.
ما الذي نحتاجه للتطوير إلى جانب لوحة الاكتشاف؟
في عملنا مع لوحة Discovery ، سنحتاج إلى عدد من الأشياء التي لا يمكن استبدالها والتي لا يمكننا الاستغناء عنها:
- لوحة الدوائر لمعرفة أين وأين وما هو متصل. يمكنك أن تأخذ الدائرة على صفحة الشركة المصنعة للوحة الأم في قسم حزمة التخطيطي. يمكنك تنزيل المخططات عن طريق تمرير صفحة أقل قليلاً في الكتلة الموضحة في الصورة:
- ورقة بيانات إلى وحدة التحكم الدقيقة الخاصة بنا بحيث يمكنك في أي وقت مناسب رؤية pinout والمواصفات والمعلمات وغيرها من المعلومات الضرورية للعمل. في حالتي هو STM32F051R8T6 . رابط ورقة البيانات موجود في عنوان الصفحة:
- نحتاج أيضًا إلى الدليل المرجعي على وحدة التحكم الدقيقة. هذه وثيقة يتم فيها وصف طرق وأساليب العمل مع قلب MK ، مع كتلة الساعة ، مع الأجهزة الطرفية ، وما إلى ذلك بالتفصيل. كما يحتوي على وصف لجميع تسجيلات MK وجميع خيارات وإعدادات MK والأجهزة الطرفية. ربما يكون هذا هو الملف الأكثر أهمية والذي بدونه سيكون من الصعب جدًا معرفة كيف وماذا يعمل داخل MK. يمكنك تنزيل الملف من الرابط الموجود في صفحة وحدة التحكم الدقيقة:
- وأخيرًا ، نحتاج إلى إنشاء بيئة تطوير يمكننا من خلالها إنشاء برامج لعضو الكنيست الخاص بنا وتجميع برامجنا بهدوء. في وقت من الأوقات ، جربت تقريبًا جميع IDEs الأكثر شيوعًا واستقرت على Keil uVision 5. في رأيي ، بدا لي أن بيئة التطوير هذه هي الأكثر راحة وسهولة في التعلم. كانت العوامل الحاسمة التي أثرت على اختياري مصحح الأخطاء المدمج والمكتبات الجاهزة ذات المستوى المنخفض والمتصلة بسهولة ، وعددًا هائلاً من الأمثلة وواجهة عمل منظمة بشكل مناسب ومساحة IDE. يمكنك تنزيل IDE هذا من الموقع الرسمي ، ولكن التسجيل البسيط مطلوب:. هناك بالفعل قيود صغيرة واحدة على حجم البرامج الثابتة التي تم تنزيلها في 32 كيلوبايت منذ ذلك الحين يتم دفع IDE هذا. لكن هذا سيكون أكثر من كافٍ بالنسبة لنا. سنحتاج إلى MDK-Arm:
دعنا نبدأ مع الإعداد الأولي وإعداد IDE للعمل!
بعد تنزيل ملف التثبيت الخاص بـ IDE الخاص بنا ، يمكنك متابعة التثبيت. اتبع تعليمات المثبت لإكمال عملية التثبيت. بعد نسخ جميع الملفات اللازمة للتشغيل ، ستظهر نافذة
لمثبت البرنامج لتطوير
Pack Installer . يحتوي هذا المثبت على مكتبات منخفضة المستوى ، ووسيطة ، وأمثلة على البرامج التي يتم تحديثها وتحديثها بانتظام.
لبدء العمل مع مجلسنا ، نحتاج إلى تثبيت عدد من الحزم اللازمة للعمل ونحتاج إلى العثور على متحكم دقيق سنعمل معه. يمكنك أيضًا استخدام البحث في أعلى النافذة. بعد العثور على عضو الكنيست الخاص بنا ، انقر عليه في النصف الثاني من النافذة ونحتاج إلى تثبيت القائمة التالية من المكتبات:
- Keil :: STM32F0xx_DFP عبارة عن حزمة برامج كاملة لعائلة محددة من وحدات التحكم الدقيقة ، بما في ذلك الكتيبات وأوراق البيانات وملفات SVD والمكتبات من الشركة المصنعة.
- ARM :: CMSIS عبارة عن حزمة من معيار واجهة برنامج Cortex Microcontroller Software Interface Standard ، والتي تتضمن مجموعة كاملة من المكتبات من ARM لدعم Core Cortex.
- Keil :: ARM_Compiler هو أحدث مترجم لـ ARM.
بعد تثبيت الحزم المطلوبة ، يمكنك المتابعة لتكوين IDE و مصحح الأخطاء / المبرمج الخاص بنا. للقيام بذلك ، نحتاج إلى فتح نافذة Keil الرئيسية وإنشاء مشروع جديد.
للقيام بذلك ، انتقل إلى القائمة
Project -> New uVision Project وحدد المجلد
الذي سنحفظ فيه مشروعنا.
بعد أن يسألنا Keil عن عضو الكنيست الذي سيتم استخدامه في المشروع. حدد MK المطلوب وانقر فوق
OK .
وستظهر نافذة مرة أخرى ، مألوفة لنا بالفعل ، حيث يمكننا توصيل الوحدات ذات الأهمية للمشروع. بالنسبة لمشروعنا ، نحتاج إلى وحدتين:
- جوهر مكتبة CMSIS ، حيث يتم الإعلان عن الإعدادات وعناوين التسجيل وأكثر من ذلك بكثير ما هو ضروري لعمل عضو الكنيست لدينا.
- ملف بدء التشغيل ، وهو المسؤول عن تهيئة MK عند بدء التشغيل ، والإعلان عن المتجهات ومعالجات المقاطعة ، وأكثر من ذلك بكثير.
إذا تم استيفاء جميع تبعيات المكون الإضافي ، فسيشير المدير إلينا باللون الأخضر:
بعد أن نضغط على
الزر "موافق" ، يمكننا البدء في إنشاء مشروعنا.
من أجل تكوين معلمات المشروع وتكوين مبرمجنا ، انقر بزر الماوس الأيمن على
الهدف 1 لفتح القائمة المقابلة.
في القائمة الرئيسية للمشروع ، اضبط معلمة
Xtal على
8.0 ميجا هرتز . هذه المعلمة مسؤولة عن تكرار تشغيل مذبذب الكوارتز من MK لدينا:
بعد ذلك ، نواصل تكوين مبرمجنا / مصحح الأخطاء. في نفس النافذة ، انقر فوق علامة التبويب
Debug وحدد المعلمة
ST-Link Debugger في الحقل
Use وانتقل إلى الإعدادات:
في الإعدادات ، يجب أن نرى نموذج ST-Link الخاص بنا مثبتًا على اللوحة والرقم التسلسلي وإصدار HW و IDCODE MK الذي سنومض:
من أجل الراحة ، يمكنك تكوين المعلمة المسؤولة عن إعادة تعيين MK تلقائيًا بعد الوميض. للقيام بذلك ، تحقق من حقل
إعادة التشغيل والتشغيل .
بعد ذلك ، تحتاج إلى تكوين خيار آخر سيسمح لنا بكتابة تعليقات باللغة الروسية على رمز مشاريعنا.
نضغط على زر
التكوين وفي القائمة التي تفتح ، حدد
الروسية Windows-1251 في حقل
الترميز .
هذا كل شيء. لدينا IDE والمبرمج على استعداد للذهاب!
لدى Keil متصفح ملائم للمشروع يمكننا من خلاله رؤية هيكل المشروع والمواد المرجعية اللازمة للعمل ، بما في ذلك المواد التي قمنا بتنزيلها بالفعل على جهاز الكمبيوتر الخاص بنا من قبل (مخطط الاكتشاف ، ورقة البيانات ، الدليل المرجعي) ، قائمة الوظائف المستخدمة في المشروع والقوالب من أجل الإدراج السريع للبنى اللغوية المختلفة للغة البرمجة.
إعادة تسمية المجلد في بنية المشروع من
Source Group 1 إلى
التطبيق / المستخدم ، مما يشير إلى أنه سيكون لدينا ملفات برنامج المستخدم في هذا المجلد:
أضف ملف البرنامج الرئيسي من خلال متصفح المشروع من خلال تنفيذ أمر
إضافة عنصر جديد إلى المجموعة "التطبيق / المستخدم" .
يجب تحديد
ملف C (.c) من القائمة وتعيين الاسم
main.c :
ستتم إضافة الملف الذي تم إنشاؤه تلقائيًا إلى هيكل المشروع وسيتم فتحه في نافذة البرنامج الرئيسية.
حسنًا ، يمكننا الآن البدء في إنشاء برنامجنا.
بادئ ذي بدء ، تحتاج إلى ربط مستند رأس عائلة المتحكمات الدقيقة الخاصة بنا بملفنا القابل للتنفيذ. أضف الأسطر التالية إلى ملف
main.c ، هذا البرنامج سيجعل مصابيحنا تومض بالتناوب:
/* */
#include "stm32f0xx.h"
/* */
int main(void)
{
/* GPIO */
RCC->AHBENR |= RCC_AHBENR_GPIOCEN;
/* PC8 PC9 Output*/
GPIOC ->MODER = 0x50000;
/* Output type Push-Pull */
GPIOC->OTYPER = 0;
/* Low */
GPIOC->OSPEEDR = 0;
while(1)
{
/* PC8, PC9 */
GPIOC->ODR = 0x100;
for (int i=0; i<500000; i++){} //
/* PC9, PC8 */
GPIOC->ODR = 0x200;
for (int i=0; i<500000; i++){} //
}
}
, , . :
Build ( F7) , , :
Load ( F8) :
, .
! STM32 !
, , , Discovery. )
:
- STM32 -
- STM32:
- STM32: ? ?