Mundarija:

Shunday qilib, siz "ko'k tabletkangiz" ga STM32duino yuklash vositasini yuklaysiz Endi nima ?: 7 qadam
Shunday qilib, siz "ko'k tabletkangiz" ga STM32duino yuklash vositasini yuklaysiz Endi nima ?: 7 qadam

Video: Shunday qilib, siz "ko'k tabletkangiz" ga STM32duino yuklash vositasini yuklaysiz Endi nima ?: 7 qadam

Video: Shunday qilib, siz
Video: 💙Таро Для Мужчин💙Кто На Пороге❗️Какие События На Пороге❗️Расклад Таро Для Мужчин 2024, Iyul
Anonim
Shunday qilib, siz STM32duino Bootloader -ni yuklaysiz
Shunday qilib, siz STM32duino Bootloader -ni yuklaysiz
Shunday qilib, siz STM32duino Bootloader -ni yuklaysiz
Shunday qilib, siz STM32duino Bootloader -ni yuklaysiz

Agar siz allaqachon STM32duino bootloader yoki boshqa shunga o'xshash hujjatlarni yuklash bo'yicha ko'rsatmalarni o'qigan bo'lsangiz, siz misol kodini yuklamoqchisiz va … hech narsa bo'lmasligi mumkin.

Muammo shundaki, ko'pchilik, agar "Umumiy" STM32 uchun barcha misollar ishlamasa. STM32 "Moviy tabletka" taxtasida ishlash uchun kichik o'zgarishlar kerak bo'ladi.

Nimani o'zgartirish kerakligini va nima uchun kerakligini tushuntirish uchun men 4 ta kod misolini tanlayman. Kodlar: "BlinkWithoutDelay", "Fading", "Dimmer" va "AnalogInSerial".

E'tibor bering, men hech narsani kodlamadim. Men yaratgan kodlarga kichik o'zgarishlar kiritaman:

Devid A. Mellis va Tom Igoe, Marti Bolivar va Skott Fitsjerald tomonidan ba'zi hollarda o'zgartirilgan

Tom Igoe va kech Bryan Newbold tomonidan o'zgartirilgan

Shunday qilib, men mualliflarning ismlarini, hatto men o'zgartirgan kodlarda ham, yaratilish kreditini saqlab qolishni afzal ko'raman.

1 -qadam: Pins va pinlar ….. Nima uchun kod ishlamayapti?

Pins va pinlar ….. Nima uchun kod ishlamayapti?
Pins va pinlar ….. Nima uchun kod ishlamayapti?

Keling, STM32 "Moviy tabletka" pinini ko'rib chiqaylik. Eslatma pinlari PA1 yoki PC2 kabi aniqlanadi.

Agar siz, masalan, "BlinkWithoutDelay" kod misoliga nazar tashlasangiz, pin "33" deb e'lon qilinadi … Nima uchun?

Menimcha, janob Marti Bolivar bu kodni MAPLE kartasi uchun o'tkazgan.

Menimcha, kod "Blue Pill" taxtalariga mos kelishiga ruxsat bermagan.

"Maple" va "Maple" mini taxtali pinlari Arduino kabi raqamli e'lon qilinadi, garchi ular 33, 24 va shunga o'xshash raqamlardan foydalansa.

Men aytdimki, kod ishlamayapti? Mening xatom. Kod hech qanday xatosiz tuziladi va "Moviy tabletka" ga to'g'ri yuklanadi, shuning uchun menimcha, bu haqiqatan ham ishlaydi, lekin GPIO chiqishi yordamida biz kutmaymiz. Hatto mavjud bo'lmasligi ham mumkin.

Shunday qilib, kutilganidek ishlashi uchun kodda ozgina o'zgartirishlar kerak.

2 -qadam: Keling, ba'zi pinlarni "aniqlaymiz"

Keling
Keling

Resurslarni oson aniqlash yoki o'zgaruvchilar yoki doimiylar ma'nosi sifatida e'lon qilish yaxshi kod amaliyotidir. Bu sizga kodni tushunishni osonlashtiradi va muammolarni bartaraf qiladi.

Men Arduino pinlarini shunday e'lon qildim:

const int ledPin = 13;

…"

Agar siz menga yoqsangiz, ehtimol siz o'zingizga shunday savol berasiz: "Qanday qilib men PC13 kabi ismli pinlarni e'lon qila olaman ???"

Javob: "#define" C iborasidan foydalaning.

Shunday qilib, pinout chizig'iga ko'ra, PC13 - bu "BluePill" dagi bortdagi LED. Buni ishlatish uchun men kutubxonalar ta'rifidan so'ng (#o'z ichiga oladi …) va hamma narsadan oldin shunday e'lon qilardim:

#LedPin PC13 ni aniqlang

…"

YO'Q ";" yo'qligiga e'tibor bering. qatorni tugatish, NOR "=" tayinlash.

Ikkala kodni solishtiring. Ulardan biri IDE -dan yuklangan asl misol. Ikkinchidan, men "BluePill" bilan ishlashga biroz moslashdim.

Kodda ishlatmoqchi bo'lgan barcha pinlarni e'lon qilishni qat'iy tavsiya qilaman. Hatto ADC usuli sifatida foydalanmoqchi bo'lganlar ham (bu haqda keyinroq).

Bu sizning hayotingizni osonlashtiradi.

3 -qadam: PinMode () … Sizning pinlaringizni qanday ishlatasiz …

Davom etishdan oldin PinMode () funktsiyasini tushunamiz.

Arduino singari, STM32 pinlari ham bir nechta funktsiyaga ega. Bir yoki boshqasini tanlashning eng oddiy usuli pinMode () iborasini ishlatishdir.

Arduino -da faqat 3 ta rejim mavjud: INPUT, OUTPUT yoki INPUT_PULLUP.

Boshqa tomondan, STM32 pinMode () ning ko'plab lazzatlariga ega. Ular:

OUTPUT -Asosiy raqamli chiqish: pin YUQORI bo'lganda, kuchlanish +3.3v (Vcc) da ushlab turiladi va LOW past bo'lsa, u erga tushiriladi

OUTPUT_OPEN_DRAIN -Ochiq drenaj rejimida, pin erga tok oqimini qabul qilib, "past" va yuqori empedansni ta'minlab, "yuqori" ni bildiradi

INPUT_ANALOG -Bu pinni analog (raqamli emas) o'qish uchun ishlatiladigan maxsus rejim. ADC konvertatsiyasini pimdagi kuchlanish bo'yicha bajarishga imkon beradi

INPUT_PULLUP -PIN -kodning bu rejimdagi holati INPUT -dagi kabi xabar qilinadi, lekin pin zo'riqishida sekin -asta +3.3v ga "tortiladi"

INPUT_PULLDOWN -PIN -kodning bu rejimdagi holati INPUT -da bo'lgani kabi xabar qilinadi, lekin pin zo'riqishida 0v tomon ohista "tushiriladi"

INPUT_FLOATING -INPUT sinonimi

PWM -bu PWM chiqishi uchun pin qachon ishlatilishi uchun maxsus rejim (raqamli chiqishning alohida holati)

PWM_OPEN_DRAIN -PWM singari, faqat past va yuqori aylanish davrlarining o'rniga, pimdagi kuchlanish LOW va suzuvchi (uzilgan) o'zgaruvchan davrlardan iborat

(eslatma: https://docs.leaflabs.com/static.leaflabs.com/pub/leaflabs/maple-docs/latest/lang/api/pinmode.html#lang-pinmode saytidan olingan)

Men bu qavsni ochaman, chunki siz o'zingizning kodingizni yaratishni boshlaganingizda, ehtiyojingiz uchun to'g'ri pinMode () dan foydalaning.

4 -qadam: AnalogWrite () versus PwmWrite ()… 2 xil ta'mda analog chiqish

AnalogWrite () versus PwmWrite ()… 2 xil ta'mdagi analog chiqishi
AnalogWrite () versus PwmWrite ()… 2 xil ta'mdagi analog chiqishi
AnalogWrite () versus PwmWrite ()… 2 xil ta'mdagi analog chiqishi
AnalogWrite () versus PwmWrite ()… 2 xil ta'mdagi analog chiqishi

"Blue Pill" GPIO pinlarini ishlatishdan oldin uning xatti -harakatlarini, ya'ni qanday ishlashini e'lon qilish kerak. PinMode () funktsiyasi aynan shunday qiladi.

Shunday qilib, endi analog chiqishni qanchalik to'g'ri sozlashiga e'tibor qaratamiz. U OUTPUT yoki PWM rejimi sifatida e'lon qilinishi mumkin.

Xuddi shu tarzda, analog qiymatlarni GPIOga 2 usulda kiritish mumkin: analogWrite () yoki pwmWrite (), BIR, analogWrite () faqat pinMode () = OUTPUT bo'lsa ishlaydi. Boshqa tomondan, pwmWrite () faqat pinMode () = PWM bo'lsa ishlaydi.

Masalan, PA0 ni olaylik: bu analog/pwm chiqish nomzodidir.

analogWrite (): bu shunday e'lon qilinadi:

….

#ledPin PA0 ni aniqlang

pinMode (ledPin, OUTPUT);

analogWrite (ledPin, <raqam>);

……"

bu erda raqam Arduino kabi 0 dan 255 gacha bo'lishi kerak. Aslida, bu Arduino -ga mos keladi.

pwmWrite (): shunday e'lon qiling:

#ledPin PA0 ni aniqlang

pinMode (ledPin, PWM);

pwmWrite (ledPin, <son.>);

…."

Bu erda raqam 0 ~ 65535 orasida bo'lishi kerak, bu o'lcham Arduino -dan ancha yuqori.

Rasmda ikkita kodni solishtirish mumkin. Siz asl kodni ko'rishingiz mumkin.

5 -qadam: STM32 ketma -ket aloqa

STM32 ketma -ket aloqa
STM32 ketma -ket aloqa

Keling, STM32da USART interfeyslari qanday joylashtirilganini ko'rib chiqaylik. Ha, ko'plikdagi interfeyslar ….

"Moviy tabletka" 3 ta USARTga ega (RX/ TX 1 ~ 3) va agar siz yuklash qurilmasidan foydalanayotgan bo'lsangiz, USB -dan foydalanishga ruxsat bersangiz, u hech biriga ulanmagan.

USB -ni ishlatayotganingizga yoki ishlatmasligingizga qarab, ketma -ket portni kodingizda u yoki bu tarzda e'lon qilishingiz kerak.

1 -holat: USB -dan foydalanish:

Shunday qilib, eskizlar to'g'ridan -to'g'ri USB orqali yuklab olinadi. BOOT0 o'tish moslamasini 1 pozitsiyaga va 0 ga qaytarish shart emas.

Bu holda, siz indekssiz "Serial" deb e'lon qilganingizda, bu USB orqali aloqani bildiradi.

Shunday qilib, Serial1, TX/ RX 1 degan ma'noni anglatadi (PA9 va PA10 pinlari); Serial2, TX/ RX 2 (PA2 va PA3 pinlari) va Serial 3 TX/ RX 3 (PA10 va PA11 pinlari) degan ma'noni anglatadi.

Biz shu tarzda ishlayapmiz. Men kodlashning bu usuli uchun misollarda o'zgarishlarni keltiraman.

Yana bir narsa: "Serial USB" ni ishga tushirish shart emas. Boshqacha aytganda, "… Serial.begin (15200);" kerak emas.

Har qanday Serial funktsiyasini (Serial.read (), Serial.write () va hk) ishga tushirishsiz chaqirish mumkin.

Agar biron sababga ko'ra u kodda bo'lsa, kompilyator unga e'tibor bermaydi.

2 -holat: USB adapteriga TTL seriyasini ishlatish:

Shu tarzda, bootloader mahalliy STM32 USB aloqasini qo'llab -quvvatlamaydi, shuning uchun eskizlarni yuklash uchun sizga TX/ RX 1 (pin PA9 va PA10) ga ulangan USB -ketma -ket adapter kerak bo'ladi.

Bu holda, indeks bo'lmagan "Serial" har qanday vaqtda kod, TX/ RX1 (kodni yuklash uchun ishlatiladigan port) degan ma'noni anglatadi. Shunday qilib, Serial1 TX/ RX 2 (PA2 va PA3 pinlari) va Serial2 TX/ RX 3 (PA10 va PA11 pinlari) ni bildiradi. Serial3 mavjud emas.

6 -qadam: qiymatni mikrokontrolerga o'tkazish

Qiymatni mikrokontrollerga o'tkazish
Qiymatni mikrokontrollerga o'tkazish

Dimmer misoli - bu mikrokontrollerga qiymatni qanday o'tkazishni ko'rsatishning oddiy usuli.

LED yorqinligini boshqarish uchun 0 dan 255 gacha bo'lgan qiymatni kiritish kerak.

Blue Pill -da kutilganidek ishlamaydi:

  1. PwmWrite () funktsiyasidan foydalanish uchun pinMode () PWM rejimi deb e'lon qilinishi kerak.
  2. Siz hech qachon to'liq 3 raqamli raqamni olmaysiz. Serial.read () funktsiyasi faqat "BYTE" bo'lgan bufer tarkibini oladi. agar siz "100" yozsangiz va "enter" tugmasini bossangiz, buferdan faqat oxirgi "0" olinadi. Va uning qiymati "48" bo'ladi ("0" uchun o'nlik ASCII qiymati). Agar siz "100" qiymatini chiqarishni xohlasangiz, "d" ni yozishingiz kerak. Shunday qilib, u ASCII belgisini LED yorqinligida o'nlik kasr qiymatiga aylantiradi, deyish to'g'ri, to'g'rimi? … Xo'sh, qandaydir …
  3. Muammo, qiymatlarni to'g'ridan -to'g'ri Serial.read () funktsiyasidan xarita qilish - bu hiyla -nayrang. Kutilmagan qiymatlarni olish deyarli aniq. Yaxshiroq yondashuv - bufer tarkibini vaqtinchalik o'zgaruvchiga saqlash va uni xaritaga solish.

2 -bandda aytib o'tganimdek, men kiritgan o'zgartirishlar ASCII belgisini kiritishga imkon beradi va bu ASCII o'nlik qiymatiga asoslangan LED yorqinligini boshqaradi … masalan, "bo'sh joy" - bu 32 -qiymat (aslida siz kiritishingiz mumkin bo'lgan eng past bosma belgi) va "}" eng yuqori bo'lishi mumkin (qiymati 126). Boshqa belgilarni chop etish mumkin emas, shuning uchun terminal tushunmaydi yoki ular belgilar birikmasi bo'lishi mumkin (masalan, "~" - klaviaturadagi o'lik kalit va u to'g'ri ishlamaydi). Bu shuni anglatadiki, bu murakkab belgi, terminalga kirganda, belgining o'zi va boshqa narsalarni yuboradi. Odatda bosilmaydigan. Va bu oxirgi bitta kodni yozib oladimi? Bundan tashqari, Terminalingizni yodda tuting, bu holda na "Vagonni qaytarish", na "Line Feed" ni yubormasligi kerak. Kodning to'g'ri ishlashi uchun bunga e'tibor berish kerak.

Agar siz yiqilib tushsangiz, bu chalkashlikdir, eng yomoni ….

7 -qadam: Va agar men uchta raqamni yozmoqchi bo'lsam …. yoki undan ham ko'proq ???

Va agar men uchta raqamni yozishni xohlasam … yoki undan ham ko'proq ???
Va agar men uchta raqamni yozishni xohlasam … yoki undan ham ko'proq ???

Ketma -ket muloqotdan bir nechta belgi olish oddiy ish emas.

Serial bufer - bu FIFO baytli belgilar to'plami. Har safar Serial.read () funktsiyasi chaqirilganda, birinchi yuborilgan char qoziqdan chiqariladi va boshqa joyda saqlanadi. Odatda koddagi char o'zgaruvchisi. E'tibor bering, qo'shimcha qurilmalarga bog'liq, odatda, bufer ma'lumotlarini qanday saqlashi mumkin.

Agar siz ketma -ket bir nechta raqamni kiritmoqchi bo'lsangiz, UART buferiga kirganda, siz belgi bo'yicha belgini "yozishingiz" kerak bo'ladi.

Bu shuni anglatadiki, velosipedda har bir bufer char o'qiladi, temp o'zgaruvchisida saqlanadi, uni mag'lubiyat qatorining birinchi holatiga yuklanadi, keyingi pozitsiyaga o'tkaziladi va ilovaga bog'liq bo'lguncha qayta boshlanadi. Tsiklni tugatishning 2 yo'li mavjud:

  1. "Aravachani qaytarish" yoki "chiziqli tasma" kabi "tugatish belgisi" belgilaridan foydalanish. "Oxirgi belgi" belgisi topilishi bilan pastadir tugaydi.
  2. Shu bilan bir qatorda, simlar zanjiridagi belgilar soni cheklangan bo'lishi mumkin, shuning uchun interaktiv tsikllar soni. Qachonki, chegaraga yetsa, aytaylik, 4, odatiy tugatishlarni o'z -o'zidan oladi.

Keling, buni qanday qilish kerakligi haqida oddiy misolni ko'rib chiqaylik:

  • "\ N" kabi "tugatish" belgisini o'rnating (bu ASCII char chizig'ini bildiradi).
  • ayni paytda Serial.available () rost
  • Serial.read () ni saqlash vaqtinchalik char o'zgaruvchisiga olib keladi. Esda tuting: Serial.read () aslida buferni "o'qiydi", u toza va keyingi belgi yuklanadi.
  • satr o'zgaruvchisini bu char bilan oshiring
  • Agar oxirgi char "end" bo'lsa, pastadirdan chiqing.

Odatda ketma -ket belgilar majmuasini olish tartibi rasmga o'xshaydi.

Bu janob Devid A. Mellisning asl kodini keng ko'lamda moslashtirishga asoslangan.

Bepul ishlating va sinab ko'ring. Esda tuting: qiymatlar 3 raqamli formatda kiritilishi kerak.

Bu hozircha, men qo'shimcha ketma -ket aloqa tafsilotlarini uzaytirmayman. Bu erda qamrab olish juda murakkab va u o'ziga xos "Intructables" ga loyiqdir.

Umid qilamanki, bu sizga Blue Pill -dagi misollardan foydalanishga yordam beradi va sizga bu kichik taxtaning kodi qanchalik to'g'ri ekanligini tushunishga yordam beradi.

Ko'rishguncha boshqa ko'rsatmalarda.

Tavsiya: