Orodha ya maudhui:

Kwa hivyo, Unapakia STM32duino Bootloader katika "Kidonge chako cha Bluu" Kwa nini sasa ?: Hatua 7
Kwa hivyo, Unapakia STM32duino Bootloader katika "Kidonge chako cha Bluu" Kwa nini sasa ?: Hatua 7

Video: Kwa hivyo, Unapakia STM32duino Bootloader katika "Kidonge chako cha Bluu" Kwa nini sasa ?: Hatua 7

Video: Kwa hivyo, Unapakia STM32duino Bootloader katika
Video: Как разблокировать учетную запись Mi Redmi Note 5a Prime UGG MDT6S 2024, Julai
Anonim
Kwa hivyo, Unapakia STM32duino Bootloader katika Yako
Kwa hivyo, Unapakia STM32duino Bootloader katika Yako
Kwa hivyo, Unapakia STM32duino Bootloader katika Yako
Kwa hivyo, Unapakia STM32duino Bootloader katika Yako

Ikiwa tayari umesoma mafundisho yangu akielezea jinsi mzigo wa STM32duino bootloader au nyaraka zingine zinazofanana, unajaribu mfano wa kupakia nambari na …. Inaweza kuwa hakuna kinachotokea kabisa.

Shida ni, nyingi, ikiwa sio mifano yote ya "generic" STM32 haitafanya kazi nje ya sanduku. Itakuwa muhimu mabadiliko madogo kupata kisha ufanye kazi katika bodi yako ya STM32 "Kidonge Bluu".

Nitachagua mifano 4 ya nambari kuelezea ni nini kinahitaji kubadilika na kwanini. Nambari ni: "BlinkWithoutDelay", "Fading", "Dimmer" na "AnalogInSerial".

Kumbuka sikuandika chochote. Natoa tu mabadiliko madogo kwenye nambari zilizoundwa na:

David A. Mellis na marehemu amebadilishwa na Tom Igoe, Marti Bolivar na kesi zingine na Scott Fitzgerald

Tom Igoe na marehemu amebadilishwa na Bryan Newbold

Kwa hivyo, napendelea kuweka majina ya mwandishi hata katika nambari ninazobadilisha, kuweka sifa ya uundaji.

Hatua ya 1: Pini na Pini…. Kwa nini Kanuni Sio Kazi?

Pini na Pini…. Kwa nini Kanuni Sio Kazi?
Pini na Pini…. Kwa nini Kanuni Sio Kazi?

Hebu tuangalie nje STM32 "Kidonge Bluu" nje. Pini za kumbuka zinatambuliwa kama PA1 au PC2… kitu kama hicho.

Ukiangalia, kwa mfano, "BlinkWithoutDelay" kificho mfano, pini inatangazwa kama "33"…. Kwa nini?

Ninashuku kuwa ni kwa sababu Bwana Marti Bolivar aliweka nambari hii kwa bodi ya MAPLE.

Nadhani haikuwa nia yake wacha msimbo uendane na bodi za "Kidonge Bluu".

Pini za bodi ya Maple na Maple mini zimetangazwa kwa nambari, kama Arduino, ingawa zinatumia nambari kama 33, 24 na zingine kama hii.

Nikasema kificho haikuwa kazi? Kosa langu. Mkusanyiko wa nambari bila kosa lolote na pakia kwa usahihi kwenye "Kidonge cha Bluu", kwa hivyo, maoni yangu ni kweli inafanya kazi, lakini kwa kutumia pato la GPIO hatutarajii. Huenda haipatikani hata.

Kwa hivyo mabadiliko kidogo ni muhimu kwa kificho ili ifanye kazi kama inavyotarajiwa.

Hatua ya 2: Wacha "tufafanue" Pini zingine…

Wacha
Wacha

Ni mazoezi mazuri ya kificho kutangaza rasilimali kama rahisi kutambua au maana ya vigeuzi au ya mara kwa mara. Itakuruhusu nambari iwe rahisi kuelewa na utatuzi.

Nilikuwa nikitangaza pini za Arduino kama hii:

const int ledPin = 13;

…"

Ikiwa unanipenda, labda unajiuliza: "Ninawezaje kutangaza pini zilizo na majina kama PC13 ???"

Jibu ni: Tumia "#fafanua" C taarifa.

Kwa hivyo, kulingana na mchoro wa pinout, PC13 ndio pini tunayo kwenye bodi ya LED katika "BluePill". Ili kuitumia, ningetangaza kama hii, tu baada ya ufafanuzi wa maktaba (# ni pamoja na…) na kabla ya kitu kingine chochote:

#fafanua LedPin PC13

…"

Kumbuka hakuna ";" kukomesha laini, zoezi la NOR "=".

Linganisha nambari zote mbili. Moja ni mfano wa asili uliopakiwa kutoka IDE. Pili ni ile ambayo nilibadilisha kufanya kazi na "BluePill".

Ninapendekeza sana kutangaza pini zote unazotarajia kutumia katika nambari. Hata zile zinakusudia kutumia kama pembejeo ya ADC (zaidi juu yake baadaye).

Hii itafanya maisha yako kuwa rahisi.

Hatua ya 3: PinMode ()… Jinsi Utatumia Pini Zako…

Kabla ya kuendelea, hebu kuelewa PinMode () funtion.

Kama Arduino, pini za STM32 zina kazi nyingi. Njia rahisi zaidi ya kuchagua moja au nyingine ni kutumia taarifa ya pinMode ().

Arduino zina modeli 3 tu zinazopatikana, INPUT, OUTPUT, au INPUT_PULLUP.

STM32, kwa upande mwingine ina ladha nyingi za pinMode (). Wao ni:

OUTPUT -Pato la msingi la dijiti: wakati pini iko juu, voltage inafanyika kwa + 3.3v (Vcc) na inapokuwa chini, inashushwa chini

OUTPUT_OPEN_DRAIN -Kwa hali ya kukimbia wazi, pini inaonyesha "chini" kwa kukubali mtiririko wa sasa kwenda ardhini na "juu" kwa kutoa kuongezeka kwa impedance

INPUT_ANALOG -Hii ni hali maalum ya wakati pini itatumika kwa kusoma kwa analog (sio dijiti). Huwasha ubadilishaji wa ADC kufanywa kwenye voltage kwenye pini

INPUT_PULLUP -Hali ya pini katika hali hii inaripotiwa sawa na INPUT, lakini voltage ya pini ina "vutwa" kwa upole kuelekea + 3.3v

INPUT_PULLDOWN -Hali ya pini katika hali hii inaripotiwa sawa na INPUT, lakini voltage ya pini ina "vutwa" kwa upole kuelekea 0v

INPUT_FLOATING -Sinao la INPUT

PWM -Hii ni hali maalum ya wakati pini itatumika kwa pato la PWM (kesi maalum ya pato la dijiti)

PWM_OPEN_DRAIN -Kama PWM, isipokuwa kwamba badala ya kubadilisha mizunguko ya LOW na HIGH, voltage kwenye pini ina mizunguko ya kubadilisha ya CHINI na inayoelea (imekatika)

(kumbuka: imetolewa kutoka

Ninafungua tu mabano haya kwa sababu unapoanza kuunda nambari yako mwenyewe, kuwa mwangalifu kutumia pinMode sahihi () kwa mahitaji yako.

Hatua ya 4: AnalogWrite () Dhidi ya PwmWrite ()… Pato la Analog katika ladha 2

AnalogWrite () Dhidi ya PwmWrite ()… Pato la Analog katika 2 Ladha
AnalogWrite () Dhidi ya PwmWrite ()… Pato la Analog katika 2 Ladha
AnalogWrite () Dhidi ya PwmWrite ()… Pato la Analog katika ladha 2
AnalogWrite () Dhidi ya PwmWrite ()… Pato la Analog katika ladha 2

Kabla ya kutumia "Kidonge cha Bluu" pini za GPIO ni muhimu kutangaza tabia yake, i.e., jinsi itakavyofanya kazi. Hiyo ndio hasa kazi ya pinMode () inafanya.

Kwa hivyo, hebu tuangalie sasa jinsi sahihi kuweka pato la analog. Inaweza kutangazwa ama kama hali ya OUTPUT au hali ya PWM.

Vivyo hivyo, maadili ya Analog yanaweza kuhusishwa na GPIO kwa njia 2: AnalogWrite () au pwmWrite (), BUT, AnalogWrite () ITAFANYA kazi tu ikiwa pinMode () = OUTPUT. Kwa upande mwingine, pwmWrite () itafanya kazi tu ikiwa pinMode () = PWM.

Hebu tuchukue PA0, kwa mfano: ni mgombea wa pato la analog / pwm.

analogWrite (): hii tangaza hivi:

….

#nafafanuliwaPini PA0

pinMode (ledPin, OUTPUT);

AnalogWrite (ledPin, <idadi>);

……"

ambapo nambari lazima iwe kati ya 0 na 255, kama Arduino. Kweli, ni nyuma inayoendana na Arduino.

pwmWrite (): tangaza hivi:

#nafafanuliwaPini PA0

pinMode (ledPin, PWM);

pwmWrite (ledPin, <idadi.>);

…."

Ambapo nambari lazima iwe kati ya 0 ~ 65535, azimio kubwa zaidi kuliko Arduino.

Katika picha inawezekana kulinganisha kati ya nambari 2. Unaweza pia kuona nambari asili.

Hatua ya 5: Mawasiliano ya serial STM32

Mawasiliano ya Serial ya STM32
Mawasiliano ya Serial ya STM32

Wacha tuone jinsi mipangilio ya USART imepangwa katika STM32. Ndio, miingiliano kwa wingi…..

"Kidonge cha Bluu" kina 3 USART's (RX / TX 1 ~ 3), na, ikiwa unatumia bootloader hukuruhusu utumie USB, haijaunganishwa kwa yoyote ya wakati huo.

Kulingana na unatumia au sio USB, unahitaji kutangaza bandari ya serial kwa njia moja au nyingine katika nambari yako.

Uchunguzi 1: Kutumia USB:

Kwa njia hii, michoro hupakuliwa moja kwa moja kupitia USB. Hakuna haja ya kusonga jumper ya BOOT0 kwenda kwenye nafasi 1 na kurudi kwa 0.

Katika kesi hii, wakati wowote unapotangaza "Serial" bila faharisi, inamaanisha mawasiliano kupitia USB.

Kwa hivyo, Serial1, inamaanisha TX / RX 1 (Pini PA9 na PA10); Serial2, inamaanisha TX / RX 2 (pini PA2 na PA3) na Serial 3 inamaanisha TX / RX 3 (Pini PA10 na PA11).

Hii ndio njia tunayofanya kazi nayo. Nitawasilisha mabadiliko katika mifano ya njia hii ya kuweka alama.

Jambo lingine: "Serial USB" haina haja ya kuanzisha. Kwa maneno mengine, "… Serial.begin (15200);" sio lazima.

Inawezekana piga kazi yoyote ya Serial (Serial.read (), Serial.write (), nk) bila uanzishaji wowote.

Ikiwa kwa sababu fulani iko kwenye nambari, mkusanyaji atapuuza.

Uchunguzi 2: Kutumia TTL seria kwa adapta ya USB:

Kwa njia hii, bootloader haingiliani mawasiliano ya asili ya STM32 USB, kwa hivyo unahitaji USB kwa adapta ya serial iliyounganishwa na TX / RX 1 (pin PA9 na PA10) kupakia mchoro.

Katika kesi hii, wakati wowote "Serial" bila faharisi ni nambari, inamaanisha TX / RX1 (bandari inayotumika kupakia nambari hiyo). Kwa hivyo, Serial1 inahusu TX / RX 2 (pini PA2 na PA3) na Serial2 inahusuTX / RX 3 (Pini PA10 na PA11). Hakuna Serial3 inayopatikana.

Hatua ya 6: Kupitisha Thamani kwa Microcontroller

Kupitisha Thamani kwa Mdhibiti Mdogo
Kupitisha Thamani kwa Mdhibiti Mdogo

Mfano wa Dimmer ni njia rahisi ya kuonyesha jinsi ya kupitisha dhamana kwa mdhibiti mdogo.

Tuseme kupitisha thamani kutoka 0 hadi 255 kudhibiti mwangaza wa LED.

HAITAFANYA kazi kama inavyotarajiwa katika Kidonge cha Bluu kutokana:

  1. Kutumia kazi ya pwmWrite (), pinMode () LAZIMA itangazwe kama hali ya PWM.
  2. Hautawahi kupata nambari kamili ya nambari 3. Kazi ya Serial.read () inachukua tu yaliyomo bafa, ambayo ni "BYTE". ukiandika "100" na bonyeza "ingiza", ni "0" ya mwisho tu itakayonaswa kutoka bafa. Na thamani yake itakuwa "48" (decimal ASCII thamani ya "0"). Ikiwa inakusudia kutoa thamani "100", ni muhimu kuandika "d". Kwa hivyo, ni sawa kusema itabadilisha alama ya alama ya alama ya ASCII katika mwangaza wa LED, sawa?…. Kweli, aina ya…
  3. Shida, maadili ya ramani moja kwa moja kutoka kwa kazi ya Serial.read () ni hatua ya ujanja. Ni karibu kupata maadili yasiyotarajiwa. Njia bora ni yaliyomo kwenye bafa katika ubadilishaji wa muda na KULIKO ramani.

Kama nilivyoelezea hapo awali katika kipengee 2, nambari ninayoanzisha mabadiliko itaruhusu kuingia alama ya ASCII na hii itadhibiti mwangaza wa LED kulingana na thamani yake ya desimali ya ASCII… kwa mfano, "nafasi" ni thamani ya 32 (kwa kweli ni herufi ya kuchapishwa ya chini kabisa ambayo unaweza kuingia) na "}" inawezekana ya juu zaidi (thamani ya 126). Tabia zingine haziwezi kuchapishwa, kwa hivyo wastaafu hawataelewa au inawezekana kiwanja cha herufi (kama "~" ni kitufe kilichokufa kwenye kibodi yangu na haitafanya kazi kwa usahihi). Hii inamaanisha, tabia hii ya kiwanja, ikiingia kwenye terminal, itatuma tabia yenyewe na kitu kingine. Kawaida ni isiyoweza kuchapishwa. Na hii ndio nambari moja ya mwisho itachukua. Pia, kumbuka Kituo chako, katika kesi hii, haipaswi kutuma "Kurudi kwa Inasimamia" wala "Lishe ya Njia". Lazima uzingatie hii ili nambari ifanye kazi kwa usahihi.

Ikiwa ulianguka ni utata kidogo, inakuwa mbaya zaidi….

Hatua ya 7: Na Ikiwa Ningependa Kuandika Nambari Tatu…. au Hata Zaidi ??

Na Ikiwa Ningependa Kuandika Nambari Tatu…. au Hata Zaidi ??
Na Ikiwa Ningependa Kuandika Nambari Tatu…. au Hata Zaidi ??

Pokea herufi nyingi kutoka kwa mawasiliano ya serial sio kazi rahisi.

Serial bafa ni FIFO byte rundo la chars. Wakati wowote kazi ya Serial.read () inapiga simu, kwanza char iliyotumwa huondolewa kwenye rundo na kuhifadhiwa mahali pengine popote. Kawaida kutofautisha kwa char katika kificho. Kumbuka, tegemea vifaa, kawaida kuna wakati wa kuisha wa jinsi bafa ya kumbukumbu inaweza kuweka habari.

Ikiwa unakusudia kuingiza zaidi ya nambari moja kupitia serial, lazima "utunge" mhusika wa kamba kwa mhusika, wanapoingia kwenye bafa ya UART.

Hii inamaanisha baiskeli soma kila bafa ya bafa, duka kwa kutofautisha kwa muda, ipakia katika nafasi ya kwanza ya safu ya kamba, nenda kwenye nafasi inayofuata na uanze tena, hadi… vizuri, inategemea matumizi. Kuna njia 2 za kumaliza mzunguko:

  1. Kutumia herufi fulani ya "alama ya mwisho", kama "Kurudisha gari" au "Kulisha Line". Mara tu "char Mark" inapopatikana, kitanzi kinaishia.
  2. Vinginevyo, idadi ya wahusika katika mnyororo wa kamba inaweza kuwa mdogo, kwa hivyo fanya, idadi ya mizunguko ya maingiliano. Inapofikia kikomo, wacha tuseme, 4, pata kumaliza kawaida na ubinafsi.

Wacha tuangalie kwa mfano rahisi jinsi ya kufanya hii:

  • Weka "mwisho" char, kama '\ n' (hii inamaanisha kulisha laini ASCII char).
  • looping wakati huo huo Serial.available () ni kweli
  • kuhifadhi Serial.read () husababisha mabadiliko ya muda mfupi. Kumbuka: mara tu Serial.read () kwa kweli "inasoma" bafa, ni safi na tabia inayofuata ndani yake.
  • nyongeza ubadilishaji wa kamba na char hii
  • Ikiwa char mwisho ni "mwisho" toka kitanzi.

Kawaida, utaratibu wa kupata safu ya mhusika huonekana kama picha.

Ilikuwa msingi wa marekebisho mengi ya nambari ya asili ya Bwana David A. Mellis.

Fell bure kuitumia na kuipima. Kumbuka: maadili LAZIMA yaingizwe katika muundo wa nambari 3.

Hii ni kwa sasa. Sitajiongezea maelezo ya ziada ya mawasiliano. Ni ngumu sana kufunika hapa na inastahili kumiliki vifaa vyake.

Natumai itakusaidia kutumia mifano katika Kidonge cha Bluu na kukupa mwangaza jinsi nambari sahihi ya bodi hii ndogo.

Tutaonana karibu na mengine yanayoweza kufundishwa.

Ilipendekeza: