
في مشروعي ، أستخدم
متحكم STM32F103C8 وإطار stm32duino . يقدم هذا النسخ من Arduino محمل إقلاع خاص يسمح لك بتحميل البرامج الثابتة عبر USB ، دون استخدام مكونات خارجية مثل ST-Link أو محول USB-UART.
اليوم كنت بحاجة للعمل مع وحدة تحكم عارية من تحت CooCox وبدون stm32duino. ولكن هنا تكمن المشكلة. حتى المصباح الوامض البسيط المتدفق من خلال أداة تحميل التشغيل هذه لا يعمل.
دعنا نحصل على حق. ربما يبدو لي أن حساباتي شائعة. لكنني بدأت للتو في دراسة وحدات تحكم STM32 وقتلت نصف يوم على الأقل للعثور على المشكلة. فجأة ستقصر هذه المقالة وقت التطوير لشخص ما.
ليس لدي أي شيء ضد ST-Link وغيرها من المصححين. ولكن في جهازي النهائي لن يكون ، ولكن سيكون هناك بالتأكيد USB. لماذا لا تضع على الفور القدرة على تحديث البرامج الثابتة عبر USB؟ أنا شخصياً أجد هذه الطريقة ملائمة. أكثر من ذلك على أي حال ، لدي بالفعل سلك متصل به طاقة و USB تسلسلي.
دعونا نرى كيف يعمل محمل الإقلاع. لتبدأ بمثال وحدات تحكم AVR. لماذا تذكرته؟ لقد تحولت من Arduino وتوقعت دون وعي نفس السلوك. ولكن في STM32 تحول كل شيء بشكل مختلف. لذلك ، أود أن أتحدث عن الفرق بين هذين المتحكمين الدقيقين.
لذا في الميكروكونترولر AVeg ATMega ، يمكن حجز قدر معين من الذاكرة لمحمل الإقلاع بالقرب من نهاية الفلاش. باستخدام بت المصهر يمكنك التحكم من أي عنوان سيبدأ البرنامج. إذا لم يكن هناك محمل إقلاع ، يبدأ البرنامج من العنوان 0x0000. إذا كان هناك برنامج bootloader ، فإنه يبدأ من عنوان آخر (على سبيل المثال ، في ATMega32 مع 0x3C00 ، إذا كان حجم برنامج bootloader هو 2 كيلو بايت).
عندما يقوم محمل الإقلاع بعمله ، فإنه ينقل التحكم إلى البرنامج الرئيسي من العنوان 0x0000. على سبيل المثال يبدأ البرنامج دائمًا عند 0x0000. يعمل المحول البرمجي والرابط مع حقيقة أن الرمز سيكون موجودًا في بداية مساحة العنوان.
في متحكم متحكم STM32 ، الأمر ليس كذلك. تبدأ جميع البرامج من العنوان 0x0800000. أداة تحميل التشغيل ليست خاصة جدًا. هذا هو نفس البرنامج الذي يبدأ من نفس عنوان البداية. في هذه العملية ، يمكن أن يستقبل محمل الإقلاع البرامج الثابتة (عبر USB أو UART ، ويقرأ من محرك أقراص USB محمول ، ويتلقى من القمر الصناعي ، ويحصل عليه من مساحة فرعية ، أيا كان ...) ويكتبه إلى عناوين أعلى من محمل الإقلاع نفسه. وبطبيعة الحال ، في نهاية عمله ، نقل السيطرة إلى البرنامج الرئيسي.
لذلك عند تجميع البرامج الثابتة ، يجب أن تعرف أين سيكتب برنامج تحميل التمهيد البرامج الثابتة وتعديل العناوين وفقًا لذلك.
هذا كله مع النظرية. دعنا ننتقل إلى الممارسة. فيما يلي تعليمات خطوة بخطوة حول كيفية ربط محمل إقلاع USB بميكروكنترولر سلسلة STM32F1xx ، وربما لبعض الآخرين أيضًا.
ومع ذلك ، هناك بعض القيود على الدوائر الكهربية. هنا ، لسوء الحظ ، لست قويًا. يحتاج ITP إلى مقاومة سحب 1.5 كيلو لمنفذ PA12 (المعروف أيضًا باسم USB D +). هذا يسمح لمحمّل الإقلاع بالاتصال والفصل عن USB في الوقت المناسب.
التعليمات:
جزء آخر من الفروق الدقيقة. قبل تحميل البرامج الثابتة ، تحتاج إلى تشغيل أداة تحميل التشغيل. أسهل طريقة هي الضغط على زر إعادة الضبط. بعد ذلك ، سيبدأ برنامج تحميل التشغيل وينتظر بضع ثوانٍ للحصول على البرنامج الثابت. إذا لم يبدأ أحد في maple_upload في هذه اللحظة ، فإن أداة تحميل التشغيل ستنقل التحكم إلى البرامج الثابتة الرئيسية.
لكي لا تضغط على إعادة التعيين في كل مرة ، تستخدم الألواح القائمة على libmaple / stm32duino خدعة. يستمعون إلى منفذ تسلسلي USB. إذا ظهرت إشارة DTR هناك وتم إرسال تسلسل مفاتيح البايت ، فسيتم إعادة تحميل وحدة التحكم الدقيقة في أداة تحميل التشغيل. انظر
إلى دالة rxHook () .
قد يتسبب هذا في إزعاج. إذا تم إيقاف تشغيل وحدة التحكم الدقيقة وتوقفها ، فلن تستمع بعد ذلك إلى المنفذ. لذلك ، لا يمكنه سماع تسلسل المفاتيح وإعادة التشغيل في أداة تحميل التشغيل. ثم إعادة تعيين فقط للمساعدة.
هذا كل شيء. آمل أن تسلط مقالتي الضوء على كيفية عمل أداة تحميل التشغيل في STM32 وكيفية تنزيل البرامج الثابتة عبر منفذ USB. لسوء الحظ ، لا يزال حد الدخول مرتفعًا ، ولكن فجأة ستساعد مقالتي شخصًا ما في التغلب عليه.