لوحة STM32 رخيصة + Arduino IDE UPD 08/17/2017

الصورة

هل تريد ترقية مشروعات Arduino الخاصة بك؟ اجعلها تعمل بشكل أسرع ، واجعل القياسات والتعديلات أكثر دقة ، وأضف الأخطاء (لا مفر منها مع الأجهزة الجديدة). ثم هذه المقالة لك.

يجذب موضوع Arduino أكثر فأكثر عقول البشرية ، لكننا عاجلاً أم آجلاً نواجه حقيقة أننا نفتقد شيئًا ، على سبيل المثال ، الميزانية / الأحجام / دبابيس المنافذ / السعة / الأداء ... كما قال رجل حكيم - "من يريد ، فإنه يبحث عن الفرص من لا يريد يبحث عن أسباب ".

يفهم الأشخاص الطيبون هذا ، ويبدأون ببطء في إرفاق STM32 بموضوع اردوينو ، لأن وحدات التحكم الدقيقة ذات الثماني بت AVR ، والتي تقوم عليها العديد من لوحات اردوينو ، لا يمكنها دائمًا التعامل مع المهام.

ملخص هذا المقال بصيغة الفيديو:



حسنًا ، كلمات أقل وأقرب إلى الموضوع. في هذه المقالة ، سأفكر في لوحة تصحيح رخيصة ، والتي تعتمد على متحكم متحكم STM32F103C8T6 :

الصورة

أولاً ، دعنا نقارن المعلمات الرئيسية للوحة STM32 ، ونظير سعرها - Arduino Nano V3.0:

  • تردد التشغيل 72 ميجاهرتز مقابل 16 لاردوينو ؛
  • يبلغ حجم ذاكرة الفلاش 64 كيلوبايت مقابل 32 ؛
  • ذاكرة الوصول العشوائي ، وهي ذاكرة الوصول العشوائي (حيث يتم تخزين المتغيرات) ، و STM32 لديها ما يصل إلى 20 كيلوبايت ، و arduinka لديه فقط 2 ؛
  • ADC سريع 12 بت ، بينما تستخدم لوحات Arduino التي تستخدم ميكروكنترول AVR (عادة ما تكون الأغلبية) 10 بت. هذا يعني أنه في حالة STM32 ، تكون الوظيفة analogRead (*) ؛ سيتم إرجاع 0..4095 مقابل 0..1023 ، مما يؤدي في الحالة الأولى إلى قياسات أكثر دقة ؛
  • 16- , 8- Arduino , , analogWrite(*);pwmWrite(*); 0..65535, 0..255. , , ;
  • USB, Arduino 2 ;
  • — 2 3.6( 2 AA ), 2.7...5 ;
  • — 1.9 1.8().

من الواضح أن لوحة التصحيح المستندة إلى STM32 تتفوق على Arduino Nano من جميع النواحي ، باستثناء السعر ، ولكن توافق على أن 10 سنتات هي سعر جيد لأداء رائع ، ولكن فيما يتعلق بالأجهزة الطرفية التي يتم حشو STM32 بها ، أنا صامت تمامًا بشأن قيمة DMA أو ساعات مدمجة في الوقت الحقيقي في وحدة التحكم الدقيقة.

الصورة

كل هذا يجعل هذه اللوحة جذابة للغاية في كل شيء باستثناء شيء واحد - بالنسبة للمبتدئين ، مثلي ، يبدو موضوع STM32 مستهلكًا للوقت كثيرًا ، وهناك مواقع كاملة مخصصة لبرمجة وحدات التحكم الدقيقة هذه. ولكن إذا قمت بتكوين صداقات STM32 مع Arduino IDE ، فإن عتبة الدخول تنخفض إلى مستوى منخفض للغاية. على الرغم من أنهم ، كما يقولون ، "في كل برميل من العسل ، هناك ذبابة في المرهم" ، ولكن أكثر من ذلك أدناه.

لنبدأ في إعداد اللوحة للعمل مع Arduino IDE. أول شيء يجب القيام به هو تحميل محمل إقلاع خاص إلى وحدة التحكم الدقيقة ، والتي ستسمح لك بوميض اللوحة عبر جهاز USB ، ومباشرة من بيئة التطوير. للقيام بذلك ، حرك الطائر العلوي (المعروف أيضًا باسم "BOOT0") ، إلى الموضع "1":

الصورة

ما هي القافزات BOOT0 و BOOT1؟
, STM32 , (system memory), , USB to UART , ST-Link V2.

image


بعد ذلك نحتاج إلى محول من USB إلى UART. تجدر الإشارة إلى أن STM32 هو منطق 3.3V ، والتوافق مع 5V غير مضمون ، لذلك يوصى باستخدام USB إلى UART ، الذي لديه القدرة على اختيار أوضاع التشغيل مع منطق 3.3 / 5V. لقد استخدمت محولًا رخيصًا يعتمد على CH340G:

الصورة
* كما ترى ، لم تتحول الشركة المصنعة بغسل التدفق ، بالطبع ، لا يؤثر على العمل.

لقد قمت بتوصيل اللوحة بمحول USB إلى UART على النحو التالي:

G <-> GND؛
5 فولت <-> 5 فولت ؛
PA10 <-> TXD ؛
PA9 <-> RXD.

الصورة
* يتم توقيع PA10 / PA9 على اللوحة ببساطة كـ A10 / A9 - هذه المنافذ هي أول أجهزة USART ، وهناك 3 منها على اللوحة ، وهناك أيضًا جهازان I2Cs و 2 SPIs.

من أجل الراحة ، قمت بتشغيل اللوحة من 5 فولت ، للحصول على الطاقة من 3.3 فولت ، تحتوي اللوحة على دبوس "3.3". انتباه ، يمكن لـ 5 V تعطيل وحدة التحكم الدقيقة بسهولة ، لذا انتبه جيدًا للاتصال.

قم بتنزيل وتثبيت وتشغيل Flash Loader Demonstrator (متوفر في أرشيف المقال):

الصورة

حدد رقم منفذ COM الخاص بالمحول ، في حالتي هو COM43 ، ثم انقر فوق "التالي":

الصورة

نظرًا لأن لدي متحكمًا جديدًا ، فلا يزال الذبابة لا يجلسلا أحد كتب أي شيء إليها (بالطبع ، باستثناء الشركة المصنعة نفسها) ، ثم افتراضيًا هناك حماية للقراءة ، يحذرنا البرنامج من أنه إذا قمت بالنقر فوق الزر "إزالة الحماية" ، سيتم مسح ذاكرة فلاش ، أي إذا كان هناك نوع من البرامج الثابتة - ستتقاعد. في حالتي ، لا يوجد شيء مفيد هناك ، لذلك أضغط بجرأة. ثم أرى ما يلي:

الصورة

انقر فوق "موافق":

الصورة

نظرًا لأن لوحة التصحيح الخاصة بي تعتمد على متحكم متحكم STM32F103 C8 - هناك 64 كيلوبايت من ذاكرة فلاش ، هناك أيضًا متحكم متحكم STM32F103 CB ، والذي يحتوي على ضعف فلاش.

ثم انقر فوق "التالي":

الصورة

مرة أخرى ، "التالي" ، ونرى النافذة التالية:

الصورة

حدد "تنزيل على الجهاز" وانقر على "...":

الصورة

قم بتغيير نوع الملف إلى * .bin وافتح الملف "generic_boot20_pc13.bin" (موجود أيضًا في الأرشيف) والذي يمكن أخذه من مشروع STM32duino-bootloader .

ثم نضغط على زر "التالي" ، بعد البرامج الثابتة لبرنامج bootloader ، سنرى ضوءًا أخضر:

الصورة

ثم نحتاج إلى تنزيل نواة STM32 خاصة لبيئة تطوير Arduino IDE (وهي أيضًا في أرشيف المقالة). هناك فارق بسيط واحد هنا ، في وقت كتابة هذا التقرير ، لا تعمل النواة على إصدارات بيئة التطوير التي تزيد عن 1.6.5 ، ولدي 1.6.5-r5 التي قمت بتنزيلها هنا .
تم اختبار النواة للعمل على الإصدار 1.6.9 من Arduino IDE .

بعد ذلك ، قم بفك ضغط محتويات My Documents \ Arduino \ hardware:

الصورة

في حالتي ، يبدو المسار الكامل كما يلي - "C: \ Users \ RSK \ Documents \ Arduino \ hardware"

بالطبع ، لا يمكن للنظام تحديد نظام الجهاز ، لذلك لا تزال بحاجة إلى تثبيت برامج التشغيل على اللوحة. ننتقل إلى المجلد "My Documents \ Arduino \ hardware \ Arduino_STM32 \ drivers \ win" (أو "drivers \ win" ، في حالة أرشيف المقالة) ، ونشغل الملف "install_drivers.bat" كمسؤول:

الصورة

بعد ذلك ، الطائر الأعلى (ذلك أن "BOOT0") ، ضعها في الموضع "0" وقم بتوصيل اللوحة بالكمبيوتر عبر كابل microUSB:

الصورة

يجب تعريفها في إدارة الأجهزة إما "Maple DFU" أو "Maple Serial (COM *)":

الصورة

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

أطلقنا بيئة التطوير ، ثم الأدوات ->

الصورة

اللوحة -> مدير اللوحات: هنا تحتاج إلى تثبيت النواة للوحة Arduino Due. حدد أحدث إصدار وانقر فوق "تثبيت":

الصورة

ثم أدوات -> لوحة -> "عام STM32F103C" ، ثم متغير: "STM32F103C8 (ذاكرة وصول عشوائي 20 كيلو بايت. 64 كيلو بايت فلاش)" ، طريقة التحميل: "محمل التمهيد STM32duino" ، رقم منفذ COM على اللوحة بشكل عام ، كل شيء كما في لقطة الشاشة:

الصورة

كل شيء ، اللوحة جاهزة للبرامج الثابتة والبرمجة في بيئة تطوير Arduino IDE. دعنا نطلق بعض الرسم التخطيطي من الأمثلة "المخيط" في النواة ، انتقل إلى ملف -> مجلد برسومات -> أجهزة -> Arduino_STM32 -> STM32F1 -> مكتبات -> A_STM32_Examples -> رقمي -> Blink:

الصورة

Classic "Hello World" في عالم الميكروكونترولر. نغير PB1 إلى PC13 ، لأن LED على اللوحةمتصل بهذا المنفذ:

الصورة
* بالمناسبة ، يضيء عند مستوى منخفض على ساق PC13.

نضغط على الزر "تنزيل" ، بعد البرامج الثابتة ، ستعرض بيئة التطوير شيئًا مثل:

الصورة

"تم!
إعادة تعيين USB للتبديل مرة أخرى إلى
خطأ وضع وقت التشغيل إعادة التعيين بعد التنزيل: usb_reset: تعذرت إعادة تعيين الجهاز ، خطأ في الفوز: لا يمكن العثور على الملف المحدد. "

ولكن تم تحميل البرنامج الثابت بنجاح ، على الرغم من أنه ليس دائمًا هو الحال ، في بعض الأحيان يعطي Arduino IDE رسائل أخرى.

تعذر العثور على جهاز DFU
, :

image

«dfu-util — © 2007-2008 by OpenMoko Inc.
Couldn't find the DFU device: [1EAF:0003]
This program is Free Software and has ABSOLUTELY NO WARRANTY»

, .


جاري البحث عن جهاز DFU [1EAF: 0003] ...
:

image

«Searching for DFU device [1EAF:0003]…
Assuming the board is in perpetual bootloader mode and continuing to attempt dfu programming...»

, . Arduino Pro Mini.


والآن حول "التحليق في المرهم" ، الذي كتبت عنه في بداية المقالة ، لسبب ما ، لا يمكن دائمًا تحريك اللوح في بيئة التطوير ، بل أكثر من ذلك ، لا يتم تحديده دائمًا بواسطة الكمبيوتر. لقد قررت ذلك بنفسي على النحو التالي ، قبل تنزيل البرنامج الثابت (قبل النقر فوق الزر "تنزيل") ، انقر فوق "إعادة تعيين" على اللوحة ، وبعد البرنامج الثابت ، أعيد تشغيل اللوحة مرة أخرى. في هذه الحالة ، تبلغ نسبة احتمال خياطة اللوحة 99٪. من غير الواضح لماذا يعمل بهذه الطريقة ، ولكن حقيقة. أعتقد أنه سيتم تصحيح هذا العضادة عاجلاً أم آجلاً ، وسيتم إعادة تشغيل كل شيء تلقائيًا حسب الحاجة. ولإصلاح ذلك بشكل أسرع ، من الضروري أن ينمو مجتمع لوحة تصحيح الأخطاء STM32 الرائعة هذه ، لذا شارك هذه المقالة مع الأصدقاء ، وخاصة الأصدقاء المبرمجين.

حول pinout:

قابل للنقر
, ( ):

image
() www.stm32duino.com/viewtopic.php?p=11137

, :

digitalWrite(PB0, LOW);
analogWrite(PA8, 65535);pwmWrite(PA8, 65535);
analogRead(PA0);
LiquidCrystal lcd(PB0, PA7, PA6, PA5, PA4, PA3);


docs.leaflabs.com/docs.leaflabs.com/index.html Arduino IDE, .

, :
Documents\Arduino\hardware\Arduino_STM32\STM32F1\variants\generic_stm32f103c\board.cpp

, :
  • , analogWrite();pwmWrite(); — PB0, PA7, PA6, PA3, PA2, PA1, PA0, PB7, PB6, PA10, PA9, PA8, , ;
  • , analogRead(); — PB0, PA7, PA6, PA5, PA4, PA3, PA2, PA1, PA0.


. , 1.9 .

, PA12/PA11 D+/D- USB, , , 2- , .


لوحة الدوائر:



حسنًا ، أخيرًا:

الصورة

مرحبًا geektimes.ru
//https://github.com/mk90/LiquidCrystalRus

//STM32  !

#include <LiquidCrystalRus.h>

LiquidCrystalRus lcd(PB9, PB8, PB7, PB6, PB5, PB4);

void setup() {
  lcd.begin(16, 2);
  lcd.print("");
  lcd.setCursor(0, 1);
  lcd.print("geektimes.ru");
}

void loop() {
  lcd.setCursor(14, 1);
  lcd.print(millis() / 1000);
}



الروابط:
أرشيف للمقال .
بوابة صديق روجر كلارك مخصص لنقل STM32 ، أسئلة / اقتراحات / شكر ، كل ذلك ؛
https://github.com/rogerclarkmelbourne/Arduino_STM32 ؛
http://docs.leaflabs.com/docs.leaflabs.com/index.html - كان هذا المشروع هو الذي أخذه روجر كأساس ، لذلك هناك الكثير من الأشياء المفيدة ، على الرغم من اللغة الإنجليزية ؛
يمكن تنزيل Arduino IDE الإصدار 1.6.5-r5 هنا ؛
تتقاطع مقالتي ، إلى حد ما ، مع صديق " STM32 vs Arduino " RaJa ؛
ورقة بيانات على STM32F103C8T6 ؛
جميع مطبوعاتي على geektimes .

UPD 07/15/2016
تم اختبار النواة للعمل على إصدار Arduino IDE 1.6.9:
geektimes.ru/post/277928/#comment_9532576

PS
ما نسي آخر
:

image

, .

, microUSB :

image

, , .

Source: https://habr.com/ru/post/ar395577/


All Articles