Sisällysluettelo:

Joten lataat STM32duino -käynnistyslataimen "siniseen pilleriisi" Joten mitä nyt?: 7 vaihetta
Joten lataat STM32duino -käynnistyslataimen "siniseen pilleriisi" Joten mitä nyt?: 7 vaihetta

Video: Joten lataat STM32duino -käynnistyslataimen "siniseen pilleriisi" Joten mitä nyt?: 7 vaihetta

Video: Joten lataat STM32duino -käynnistyslataimen
Video: Строительство Лодки из Пластиковых Бочек и Дерева в Джунглях 2024, Marraskuu
Anonim
Joten lataat STM32duino -käynnistyslataimen laitteeseesi
Joten lataat STM32duino -käynnistyslataimen laitteeseesi
Joten lataat STM32duino -käynnistyslataimen laitteeseesi
Joten lataat STM32duino -käynnistyslataimen laitteeseesi

Jos olet jo lukenut ohjeet, jotka selittävät STM32duino -käynnistyslataimen tai minkä tahansa muun vastaavan dokumentaation lataamisen, kokeile latauskoodiesimerkkiä ja…. Saattaa olla, ettei mitään tapahdu.

Ongelmana on, että monet, elleivät kaikki esimerkit "yleisestä" STM32: sta, eivät toimi heti. Tarvitset pieniä muutoksia, jotta voit työskennellä STM32 "Blue Pill" -korttisi kanssa.

Valitsen neljä koodiesimerkkiä selittääkseni, mitä on muutettava ja miksi. Koodit ovat: "BlinkWithoutDelay", "Fading", "Dimmer" ja "AnalogInSerial".

Huomaa, etten ole koodannut mitään. Teen vain pieniä muutoksia koodeihin, jotka ovat luoneet:

David A. Mellis ja myöhään muokatut Tom Igoe, Marti Bolivar ja joissakin tapauksissa Scott Fitzgerald

Tom Igoe ja myöhään muokannut Bryan Newbold

Joten pidän mieluummin tekijöiden nimet jopa muokkaamissani koodeissa säilyttäen luomisen hyvityksen.

Vaihe 1: Nastat… Miksi koodi ei toimi?

Nastat… Miksi koodi ei toimi?
Nastat… Miksi koodi ei toimi?

Katsotaanpa STM32 "Blue Pill" -tappia. Huomautus nastat tunnistetaan PA1 tai PC2… jotain sellaista.

Jos tarkastelet esimerkiksi "BlinkWithoutDelay" -koodiesimerkkiä, nasta ilmoitetaan "33"…. Miksi?

Epäilen, että tämä johtuu siitä, että herra Marti Bolivar siirsi tämän koodin MAPLE -kortille.

Mielestäni hänen tarkoituksensa ei ollut antaa koodin yhteensopiva "Blue Pill" -taulujen kanssa.

Maple- ja Maple -minilevytapit on ilmoitettu numeerisesti, kuten Arduino, vaikka ne käyttävät numeroita, kuten 33, 24 ja jotkut tämänkaltaiset.

Sanoinko, että koodi ei toimi? Minun virheeni. Koodin kokoaminen ilman virheitä ja lataa oikein "Blue Pill" -laitteeseen, joten mielestäni se todellakin toimii, mutta GPIO -lähtöä käyttämällä emme odota. Ei ehkä ole edes saatavilla.

Joten koodiin tarvitaan pieniä muutoksia, jotta se toimisi odotetusti.

Vaihe 2: "Määritellään" jotkut nastat…

Katsotaanpa
Katsotaanpa

On hyvä koodikäytäntö julistaa resurssit helposti tunnistettaviksi tai merkitseviksi muuttujiksi tai vakioiksi. Sen avulla koodin ymmärtäminen ja vianmääritys on helpompaa.

Käytin julistaa Arduino -nastat seuraavasti:

const int ledPin = 13;

…"

Jos pidät minusta, ehkä kysyt itseltäsi: "Kuinka voin ilmoittaa nastat, joiden nimet ovat kuten PC13 ???"

Vastaus on: Käytä "#define" C -lauseketta.

Joten pinout -piirustuksen mukaan PC13 on tappi, joka meillä on BluePillin LED -valossa. Jotta voisin käyttää sitä, ilmoittaisin näin, juuri kirjastojen määritelmän (#include…) jälkeen ja ennen kaikkea muuta:

#define LedPin PC13

…"

Huomaa, että EI ole ";" rivin päättäminen, NOR "=" tehtävä.

Vertaa molempia koodeja. Yksi on alkuperäinen esimerkki, joka on ladattu IDE: stä. Toinen on se, jota olen säätänyt toimimaan "BluePillin" kanssa.

Suosittelen vahvasti ilmoittamaan koodissa kaikki nastat, joita aiot käyttää. Jopa ne aikovat käyttää ADC -tulona (lisää siitä myöhemmin).

Tämä helpottaa elämääsi.

Vaihe 3: PinMode ()… Kuinka käytät nastoja…

Ennen kuin jatkat, ymmärrämme PinMode () -toiminnon.

Kuten Arduino, STM32 -nastoilla on useita toimintoja. Yksinkertaisin tapa valita toinen on pinMode () -lauseke.

Arduinolla on vain 3 tilaa, INPUT, OUTPUT tai INPUT_PULLUP.

STM32, toisaalta on monia makuja pinMode (). He ovat:

OUTPUT -Perus digitaalilähtö: kun nasta on KORKEA, jännite pidetään +3,3 V (Vcc) ja kun se on MATALA, se vedetään maahan

OUTPUT_OPEN_DRAIN -Avoimessa tyhjennystilassa tappi osoittaa "alhainen" hyväksymällä virtauksen maahan ja "korkea" lisäämällä impedanssia

INPUT_ANALOG -Tämä on erityinen tila, kun pin käytetään analogiseen (ei digitaaliseen) lukemiseen. Mahdollistaa ADC -muunnoksen suorittamisen nastan jännitteelle

INPUT_PULLUP -Tapin tila tässä tilassa raportoidaan samalla tavalla kuin INPUT, mutta nastajännitettä "vedetään" varovasti ylöspäin kohti +3.3v

INPUT_PULLDOWN -Tapin tila ilmoitetaan tässä tilassa samalla tavalla kuin INPUT, mutta nastajännite "vedetään varovasti alas" kohti 0v

INPUT_FLOATING -Synonyymi INPUT: lle

PWM -Tämä on erityinen tila, kun nastaa käytetään PWM -lähtöön (digitaalisen lähdön erikoistapaus)

PWM_OPEN_DRAIN -Kuten PWM, paitsi että vuorottelevien LOW- ja HIGH -syklien sijasta tapin jännite koostuu vuorottelevista LOW- ja kelluvista sykleistä (irrotettu)

(huomautus: poimittu osoitteesta

Avasin juuri tämän sulun, koska kun aloitat oman koodin luomisen, käytä oikeaa pinMode () -kohtaa tarpeidesi mukaan.

Vaihe 4: AnalogWrite () versus PwmWrite ()… Analoginen lähtö 2 makua

AnalogWrite () vs. PwmWrite ()… Analoginen lähtö 2 makua
AnalogWrite () vs. PwmWrite ()… Analoginen lähtö 2 makua
AnalogWrite () vs. PwmWrite ()… Analoginen lähtö 2 makua
AnalogWrite () vs. PwmWrite ()… Analoginen lähtö 2 makua

Ennen "Blue Pill" GPIO -tappien käyttöä on ilmoitettava sen käyttäytymisestä eli siitä, miten se toimii. PinMode () -toiminto tekee juuri sitä.

Joten keskitytään nyt siihen, kuinka oikein asetetaan analoginen lähtö. Se voidaan ilmoittaa joko OUTPUT- tai PWM -tilaksi.

Samalla tavalla analogiset arvot voidaan määrittää GPIO: lle kahdella tavalla: analogWrite () tai pwmWrite (), BUT, analogWrite () TOIMIVAT vain, jos pinMode () = OUTPUT. Toisaalta pwmWrite () TOIMII vain, jos pinMode () = PWM.

Otetaan esimerkiksi PA0: se on analoginen/pwm -lähtöehdokas.

analogWrite (): tämä julistaa näin:

….

#define ledPin PA0

pinMode (ledPin, OUTPUT);

analogWrite (ledPin, <luku>);

……"

jossa numeron on oltava 0–255, kuten Arduino. Itse asiassa se on taaksepäin yhteensopiva Arduinon kanssa.

pwmWrite (): ilmoita näin:

#define ledPin PA0

pinMode (ledPin, PWM);

pwmWrite (ledPin, <numero.>);

…."

Jos numeron on oltava 0–65535, resoluutio on paljon suurempi kuin Arduino.

Kuvissa on mahdollista verrata kahden koodin välillä. Näet myös alkuperäisen koodin.

Vaihe 5: STM32 -sarjaliikenne

STM32 -sarjaliikenne
STM32 -sarjaliikenne

Katsotaanpa kuinka USART -rajapinnat on järjestetty STM32: ssa. Kyllä, rajapinnat monikossa ….

"Blue Pill" sisältää 3 USART -laitetta (RX/ TX 1 ~ 3), ja jos käytät käynnistyslatainta, voit käyttää USB: tä, sitä ei ole yhdistetty mihinkään.

Riippuen siitä, käytätkö USB: tä vai et, sinun on ilmoitettava sarjaportti tavalla tai toisella koodissasi.

Tapaus 1: USB: n käyttö:

Tällä tavalla luonnokset ladataan suoraan USB: n kautta. BOOT0 -hyppääjää ei tarvitse siirtää 1 asentoon ja takaisin 0 -asentoon.

Tässä tapauksessa joka kerta, kun ilmoitat "sarja" ilman indeksiä, tarkoittaa tiedonsiirtoa USB: n kautta.

Sarja 1 tarkoittaa siis TX/ RX 1 (nastat PA9 ja PA10); Sarja2 tarkoittaa TX/ RX 2 (nastat PA2 ja PA3) ja sarja 3 tarkoittaa TX/ RX 3 (nastat PA10 ja PA11).

Tämä on tapa, jolla työskentelemme. Esitän muutoksia esimerkeissä tätä koodaustapaa varten.

Toinen asia: "Serial USB" ei tarvitse alustaa. Toisin sanoen, "… Serial.begin (15200);" se ei ole tarpeellista.

On mahdollista kutsua mikä tahansa sarjatoiminto (Serial.read (), Serial.write () jne.) Ilman alustuksia.

Jos se jostain syystä on koodissa, kääntäjä jättää sen huomiotta.

Tapaus 2: TTL -sarjan käyttäminen USB -sovittimeen:

Tällä tavalla käynnistyslatain ei tue alkuperäistä STM32 -USB -tiedonsiirtoa, joten tarvitset USB -sarja -sovittimen, joka on liitetty TX/ RX 1 -laitteeseen (nastat PA9 ja PA10) luonnosten lataamiseksi.

Tässä tapauksessa milloin tahansa "Sarja" ilman indeksiä on koodi, tarkoittaa TX/ RX1 (koodin lataamiseen käytetty portti). Joten, Serial1 viittaa TX/ RX 2: hen (nastat PA2 ja PA3) ja Serial2 viittaa TX/ RX 3: een (nastat PA10 ja PA11). Serial3 ei ole käytettävissä.

Vaihe 6: Arvon siirtäminen mikro -ohjaimelle

Arvon siirtäminen mikro -ohjaimelle
Arvon siirtäminen mikro -ohjaimelle

Himmennysesimerkki on yksinkertainen tapa näyttää, miten arvo siirretään mikrokontrolleriin.

Oletetaan, että LED -kirkkauden säätö antaa arvon 0–255.

Se EI toimi odotetusti Blue Pillissä, koska:

  1. Jos haluat käyttää pwmWrite () -toimintoa, pinMode () PITÄÄ ilmoittaa PWM -tilaksi.
  2. Et koskaan saa kokonaista 3 -numeroista numeroa. Serial.read () -toiminto kaappaa vain puskurisisällön, joka on "BYTE". Jos kirjoitat "100" ja painat "enter", vain viimeinen "0" kaapataan puskurista. Ja sen arvo on "48" (desimaali ASCII -arvo "0"). Jos aiot antaa arvon "100", sinun on kirjoitettava "d". Joten on oikein sanoa, että se muuntaa ASCII -symbolin desimaaliluvun LED -kirkkaudeksi, eikö ?? … No, eräänlainen…
  3. Ongelma, kartta -arvot suoraan Serial.read () -funktiosta on temppu. On lähes varmaa saada odottamattomia arvoja. Parempi lähestymistapa on tallennuspuskurin sisältö väliaikaisessa muuttujassa ja se kartoitetaan.

Kuten selitin aiemmin kohdassa 2, muutosten tekemäni koodi sallii ASCII -symbolin syöttämisen ja tämä ohjaa LED -kirkkautta sen ASCII -desimaaliarvon perusteella … esimerkiksi "välilyönti" on arvo 32 (itse asiassa alin tulostettava merkki, jonka voit syöttää) ja "}" on mahdollinen suurin (arvo 126). Muut hahmot eivät ole tulostettavia, joten päätelaite ei ymmärrä tai ne ovat mahdollisia merkkiyhdisteitä (kuten "~" on näppäimistön kuollut näppäin eikä toimi oikein). Tämä tarkoittaa, että tämä yhdistelmämerkki, kun se syötetään päätelaitteeseen, lähettää hahmon itse ja jotain muuta. Yleensä tulostamaton. Ja onko tämä viimeinen koodi kaapattu. Muista myös, että tässä tapauksessa päätelaitteesi EI saa lähettää "kuljetuspaluuta" tai "rivinsiirtoa". Sinun on kiinnitettävä huomiota tähän, jotta koodi toimii oikein.

Jos kaadut, se on vähän hämmentävää, se pahenee ….

Vaihe 7: Ja jos haluaisin kirjoittaa kolme numeroa…. tai vielä enemmän ??

Ja jos haluaisin kirjoittaa kolme numeroa…. tai vielä enemmän ??
Ja jos haluaisin kirjoittaa kolme numeroa…. tai vielä enemmän ??

Useiden merkkien vastaanottaminen sarjaliikenteestä ei ole yksinkertainen tehtävä.

Sarjapuskuri on FIFO -tavuinen merkkipino. Aina kun Serial.read () -toiminto kutsuu, ensimmäinen lähetetty hiiri poistetaan paalusta ja tallennetaan johonkin muualle. Yleensä koodissa muuttuja char. Huomaa, riippuu laitteistosta, yleensä lokipuskuri voi säilyttää aikakatkaisun.

Jos aiot syöttää sarjassa useita numeroita, sinun on "kirjoitettava" merkkijono merkki kerrallaan, kun ne saapuvat UART -puskuriin.

Tämä tarkoittaa sitä, että pyöräily lukee jokaisen puskurimuistin, tallentaa lämpömuuttujaan, lataa se merkkijonon ensimmäiseen paikkaan, siirry seuraavaan kohtaan ja aloita alusta, kunnes… no, riippuu sovelluksesta. Syklin voi lopettaa kahdella tavalla:

  1. Käyttämällä jotakin "lopetusmerkkiä", kuten "kelkan paluu" tai "rivinsiirto". Heti "end Mark" -merkki löytyy, silmukka päättyy.
  2. Vaihtoehtoisesti merkkijonoketjun merkkien määrää voidaan rajoittaa, samoin vuorovaikutteisten syklien määrää. Kun se saavuttaa rajan, sanotaan, 4, hanki rutiininomainen viimeistely itse.

Katsotaanpa yksinkertaista esimerkkiä miten tämä tehdään:

  • Aseta "loppu" -merkki, kuten "\ n" (tämä tarkoittaa rivinsiirron ASCII -merkkiä).
  • silmukointi Serial.available () on totta
  • Serial.read (): n tallentaminen johtaa väliaikaiseen char -muuttujaan. Muista: heti kun Serial.read () todella "lukee" puskurin, se on puhdas ja seuraava merkki latautuu siihen.
  • lisää merkkijonomuuttujaa tällä merkillä
  • Jos viimeinen merkki on "loppu", poistu silmukasta.

Yleensä sarjamerkkijonon hakeminen näyttää kuvalta.

Se perustui David A. Mellisin alkuperäisen koodin laajaan muunnokseen.

Vapaasti käyttää ja testata. Muista: arvot on annettava 3 -numeroisessa muodossa.

Tämä nyt toistaiseksi. Se on liian monimutkainen kattamaan täällä ja se ansaitsee sen omat Intructables.

Toivon, että se auttaa sinua käyttämään esimerkkejä Blue Pillissä ja valaisee sinua kuinka oikea koodi tälle pienelle levylle.

Nähdään muissa ohjeissa.

Suositeltava: