Sisukord:
- 1. samm: tihvtid…. Miks kood ei tööta?
- Samm: määratleme mõned nööpnõelad…
- Samm 3: PinMode ()… kuidas te oma nõelu kasutate…
- Samm 4: AnalogWrite () versus PwmWrite ()… Analoogväljund kahes maitses
- 5. samm: STM32 jadaühendus
- Samm: väärtuse edastamine mikrokontrollerile
- Samm: ja kui ma sooviksin sisestada kolm numbrit…. või isegi rohkem ??
Video: Niisiis, laadite STM32duino alglaaduri oma "sinisesse pilli" Mis siis nüüd?: 7 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:46
Kui olete juba lugenud minu juhiseid, mis selgitavad STM32duino alglaaduri või muu sarnase dokumentatsiooni laadimist, proovige laadida koodi näidet ja… võib juhtuda, et midagi ei juhtu.
Probleem on selles, et paljud, kui mitte kõik „üldise” STM32 näited, ei tööta karbist välja. STM32 "Blue Pill" plaadil töötamiseks on vaja teha väikeseid muudatusi.
Valin 4 koodinäidet, et selgitada, mida ja miks tuleb muuta. Koodid on: "BlinkWithoutDelay", "Fading", "Dimmer" ja "AnalogInSerial".
Pange tähele, et ma EI kodeerinud midagi. Teen välja vaid väikesed muudatused koodides, mille on loonud:
David A. Mellis ja hiljaks muudetud Tom Igoe, Marti Bolivar ja mõned juhtumid Scott Fitzgerald
Tom Igoe ja hiljaks muudetud Bryan Newbold
Niisiis, eelistan autori nimesid hoida isegi muudetavates koodides, säilitades loomingukrediidi.
1. samm: tihvtid…. Miks kood ei tööta?
Vaatame STM32 "Blue Pill" tihvti. Märkus tihvtid on identifitseeritud kui PA1 või PC2…. Midagi sellist.
Kui vaatate näiteks "BlinkWithoutDelay" koodinäidet, deklareeritakse tihvt "33"…. Miks?
Ma kahtlustan, et see on sellepärast, et härra Marti Bolivar kandis selle koodi MAPLE tahvlile.
Ma arvan, et see ei olnud tema kavatsus lasta koodil „Blue Pill“tahvlitega ühilduda.
Vahtra ja vahtra miniplaadi tihvtid on arvuliselt deklareeritud, nagu Arduino, kuigi nad kasutavad numbreid nagu 33, 24 ja mõned sarnased.
Ma ütlesin, et kood ei tööta? Minu viga. Kood kompileerige ilma veata ja laadige õigesti "Blue Pill" -i üles, nii et kas see on minu arvates tõepoolest töökorras, kuid GPIO -väljundit kasutades ei oota me seda. Võib -olla pole isegi saadaval.
Nii et selle toimimiseks oodatud viisil on vaja teha väikeseid muudatusi.
Samm: määratleme mõned nööpnõelad…
Hea koodipraktika on ressursside deklareerimine muutujate või konstantide hõlpsaks tuvastamiseks või tähendamiseks. See võimaldab teil koodi paremini mõista ja tõrkeotsingut teha.
Kasutasin Arduino nööpnõelte deklareerimist järgmiselt:
…
const int ledPin = 13;
…"
Kui teile meeldib, siis võib -olla küsite endalt: "Kuidas ma saan deklareerida nööpnõelad selliste nimedega nagu PC13 ???"
Vastus on: kasutage lauset "#define".
Niisiis, vastavalt pinouti joonisele, on PC13 PIN -kood, mis meil on "BluePill" LED -is. Selle kasutamiseks deklareeriksin niimoodi vahetult pärast raamatukogude määratlust (#include…) ja enne kõike muud:
…
#define LedPin PC13
…"
Pange tähele, EI ole ";" liini lõpetamine, NOR "=" määramine.
Võrrelge mõlemat koodi. Üks neist on IDE -st laaditud algne näide. Teiseks korrigeerisin veidi tööd BluePilliga.
Soovitan tungivalt deklareerida koodis kõik tihvtid, mida kavatsete kasutada. Isegi need kavatsevad kasutada ADC sisendina (sellest lähemalt hiljem).
See muudab teie elu lihtsaks.
Samm 3: PinMode ()… kuidas te oma nõelu kasutate…
Enne jätkamist mõistame PinMode () funktsiooni.
Nagu Arduino, on ka STM32 tihvtidel mitu funktsiooni. Lihtsaim viis ühe või teise valimiseks on lause pinMode () kasutamine.
Arduinol on saadaval ainult 3 režiimi: INPUT, OUTPUT või INPUT_PULLUP.
Seevastu STM32 -l on palju maitseid pinMode (). Nemad on:
VÄLJUND -Põhiline digitaalne väljund: kui tihvt on KÕRGE, hoitakse pinget +3,3 V (Vcc) ja kui see on madal, tõmmatakse see maapinnale
OUTPUT_OPEN_DRAIN -avatud tühjendusrežiimis näitab tihvt „madalat”, võttes vastu voolu maapinnale, ja „kõrge”, suurendades takistust
INPUT_ANALOG -See on erirežiim, mille puhul tihvti kasutatakse analoog (mitte digitaalse) lugemiseks. Võimaldab ADC teisendamist tihvti pingel
INPUT_PULLUP -Tihvti olekut selles režiimis teavitatakse samamoodi nagu INPUT -i puhul, kuid tihvti pinget tõmmatakse õrnalt üles +3.3v suunas
INPUT_PULLDOWN -Tihvti olekut selles režiimis teavitatakse samamoodi nagu INPUT -i puhul, kuid tihvti pinget tõmmatakse õrnalt alla 0v suunas
INPUT_FLOATING -INPUT sünonüüm
PWM -See on erirežiim, mille puhul tihvti kasutatakse PWM -väljundiks (digitaalse väljundi erijuhtum)
PWM_OPEN_DRAIN -Nagu PWM, välja arvatud see, et vahelduvate tsüklite LOW ja HIGH asemel koosneb pinti pinge vahelduvatest tsüklitest LOW ja ujuv (lahti ühendatud)
(märkus: väljavõte saidilt
Avasin just selle sulu, sest kui hakkate oma koodi looma, olge ettevaatlik ja kasutage oma vajaduste jaoks õiget pinMode ().
Samm 4: AnalogWrite () versus PwmWrite ()… Analoogväljund kahes maitses
Enne "Blue Pill" GPIO nõelte kasutamist on vaja deklareerida selle käitumist, st kuidas see toimib. Funktsioon pinMode () teeb täpselt seda.
Niisiis, keskendume nüüd sellele, kuidas õigesti analoogväljund seadistada. Selle saab kuulutada kas väljund- või PWM -režiimiks.
Samamoodi saab analoogväärtusi GPIO -le omistada kahel viisil: analogWrite () või pwmWrite (), BUT, analogWrite () TOIMIB ainult siis, kui pinMode () = OUTPUT. Teisest küljest töötab pwmWrite () ainult siis, kui pinMode () = PWM.
Võtame näiteks PA0: see on analoog-/pwm -väljundi kandidaat.
analogWrite (): see deklareerib nii:
….
#define ledPin PA0
pinMode (ledPin, OUTPUT);
analogWrite (ledPin, <number>);
……"
kus arv peab olema vahemikus 0 kuni 255, nagu Arduino. Tegelikult ühildub see Arduinoga tagasi.
pwmWrite (): deklareerige nii:
…
#define ledPin PA0
pinMode (ledPin, PWM);
pwmWrite (ledPin, <number.>);
…."
Kui arv peab olema vahemikus 0 ~ 65535, eraldusvõime palju suurem kui Arduino.
Piltidel on võimalik võrrelda kahe koodi vahel. Näete ka algkoodi.
5. samm: STM32 jadaühendus
Vaatame, kuidas USART -liidesed on paigutatud STM32 -sse. Jah, liidesed mitmuses ….
"Sinisel pillil" on 3 USART -i (RX/ TX 1 ~ 3) ja kui kasutate alglaadurit, võimaldab see USB -d kasutada, pole see ühegagi ühendatud.
Sõltuvalt sellest, kas kasutate USB -d või mitte, peate jadapordi ühel või teisel viisil oma koodis deklareerima.
Juhtum 1: USB kasutamine:
Sel viisil laaditakse visandid otse USB kaudu alla. Pole vaja liigutada BOOT0 hüppajat 1 asendisse ja tagasi 0.
Sel juhul tähendab iga kord, kui deklareerite "Serial" ilma indeksita, side USB kaudu.
Niisiis, Serial1 tähendab TX/ RX 1 (tihvtid PA9 ja PA10); Serial2 tähendab TX/ RX 2 (tihvtid PA2 ja PA3) ja Serial 3 tähendab TX/ RX 3 (tihvtid PA10 ja PA11).
See on viis, kuidas me töötame. Esitan muudatused selle kodeerimisviisi näidetes.
Teine asi: "Serial USB" ei pea lähtestama. Teisisõnu: "… Serial.begin (15200);" ei ole vajalik.
Võimalik on käivitada mis tahes jadafunktsioon (Serial.read (), Serial.write () jne) ilma igasuguse initsialiseerimiseta.
Kui see on mingil põhjusel koodis olemas, ignoreerib kompilaator seda.
Juhtum 2: TTL seria kasutamine USB -adapteriga:
Sel moel ei toeta alglaadur natiivset STM32 USB -ühendust, seega on visandite üleslaadimiseks vaja USB -jadaadapterit, mis on ühendatud TX/ RX 1 -ga (tihvtid PA9 ja PA10).
Sel juhul tähendab iga kord, kui "Serial" ilma indeksita kood, TX/ RX1 (koodi üleslaadimiseks kasutatav port). Nii et Serial1 viitab TX/ RX 2 (tihvtid PA2 ja PA3) ja Serial2 viitab TX/ RX 3 (tihvtid PA10 ja PA11). Serial3 pole saadaval.
Samm: väärtuse edastamine mikrokontrollerile
Dimmeri näide on lihtne viis näidata, kuidas väärtus mikrokontrollerile edastada.
See eeldab, et LED -i heleduse juhtimiseks antakse väärtus vahemikku 0–255.
See EI tööta Blue Pillis ootuspäraselt:
- Funktsiooni pwmWrite () kasutamiseks tuleb PINMode () deklareerida PWM -režiimiks.
- Te ei saa kunagi tervet 3 -kohalist numbrit. Funktsioon Serial.read () salvestab lihtsalt puhverdatud sisu, mis on "BYTE". kui sisestate "100" ja vajutate sisestusklahvi, salvestatakse puhvrist ainult viimane "0". Ja selle väärtus on "48" (ASCII kümnendarv "0" jaoks). Kui kavatsete välja anda väärtuse "100", peate sisestama "d". Niisiis, on õige öelda, et see teisendab ASCII sümboli kümnendväärtuse LED -heleduse järgi, eks ??…. Noh, omamoodi…
- Probleem, kaardiväärtused otse funktsioonist Serial.read () on trikk. On peaaegu kindel, et saate ootamatuid väärtusi. Parem lähenemisviis on salvestuspuhvri sisu ajutises muutuja ja selle kaardistamine.
Nagu ma selgitasin punktis 2, võimaldab minu sisse viidud muudatuste sisestamine sisestada ASCII sümboli ja see juhib LED -i heledust, lähtudes selle ASCII kümnendväärtusest… näiteks "tühik" on väärtus 32 (tegelikult on madalaim prinditav märk, mille saate sisestada) ja "}" on võimalik kõrgeim (väärtus 126). Teisi märke ei saa printida, seega ei saa terminal aru või on need võimalikud tähemärkide ühendid (nt "~" on minu klaviatuuril surnud klahv ja ei tööta õigesti). See tähendab, et see liitmärk terminali sisenedes saadab märgi ise ja midagi muud. Tavaliselt mitteprinditav. Ja kas see viimane kood jäädvustab. Samuti pidage meeles, et sel juhul EI TOHI terminal saata "Carriage Return" ega "Line Feed". Koodi õigeks toimimiseks peate sellele tähelepanu pöörama.
Kui kukkusite, on see pisut segane, läheb see halvemaks…..
Samm: ja kui ma sooviksin sisestada kolm numbrit…. või isegi rohkem ??
Jadaühendusest mitme märgi saamine pole lihtne ülesanne.
Seeriapuhver on FIFO baitide märkide hunnik. Iga kord, kui funktsioon Serial.read () helistab, eemaldatakse esimene saadetud sümbol hunnikust ja salvestatakse mõnda mujale. Tavaliselt on koodis muutuja char. Pange tähele, oleneb riistvarast, tavaliselt on ajavahemik selle kohta, kuidas logipuhver saab teavet hoida.
Kui kavatsete jada kaudu sisestada rohkem kui ühe numbri, peate UART -puhvrisse sisenedes stringimärgi kaupa "komponeerima".
See tähendab, et jalgrattasõit loeb iga puhvri sümboli, salvestab temp muutuja, laadib selle stringimassiivi esimesse positsiooni, liigub järgmisesse asendisse ja alustab uuesti, kuni… noh, sõltub rakendusest. Tsükli lõpetamiseks on kaks võimalust:
- Kasutades mõnda "lõppmärgi" märki, näiteks "vaguni tagastamine" või "Rea etteandmine". Niipea, kui leitakse "end Mark" sümbol, lõpeb loop.
- Alternatiivina võib piirata stringide ahela tähemärkide arvu, nii ka interaktiivsete tsüklite arvu. Kui see jõuab piirini, näiteks 4, omandage rutiinsed viimistlused ise.
Vaatame lihtsat näidet, kuidas seda teha:
- Määrake lõppmärk, näiteks „\ n” (see tähendab reavahetuse ASCII sümbolit).
- looping vahepeal Serial.available () on tõene
- Serial.read () salvestamine annab ajutise char muutuja. Pidage meeles: niipea kui Serial.read () puhver tegelikult "loeb", on see puhas ja järgmine märk laaditakse sellesse.
- suurendage stringi muutujat selle märgiga
- Kui viimane märk on "lõpp", väljuge ringist.
Tavaliselt näeb seeriamärkide massiivi hankimise rutiin välja nagu pilt.
See põhines härra David A. Mellise algkoodi ulatuslikul kohandamisel.
Kasutamiseks ja testimiseks vabalt. Pidage meeles: väärtused PEAVAD olema sisestatud 3 -kohalises vormingus.
See on praegu. Ma ei laienda end täiendavate jadakommunikatsiooni üksikasjade juurde. See on siin kajastamiseks liiga keeruline ja väärib oma intructabeleid.
Loodan, et see aitab teil Blue Pilli näiteid kasutada ja annab teile valgust, kui õige kood selle väikese tahvli jaoks on.
Kohtumiseni mujal juhendatavas.
Soovitan:
Atmega328P-PU alglaaduri (Optiboot) põlemisjuhend: 12 sammu
Atmega328P-PU alglaaduri (Optiboot) põlemisjuhend: Veel üks Atmega alglaaduri põletamine. Aga seekord panustan esimesel katsel, et teil õnnestub !! See on Nick Gammonsi alglaaduri põletamise õpetus Arduino tahvlitele
Mis siis, kui teie link jookseb kokku?: 5 sammu
Mis siis, kui teie link jookseb kokku?: Selles videos loome lingi languse anduri koos ESP32 ja SIM800 -ga. See tähendab, et selle projektiga saame kontrollida Interneti -ühendust ja ühenduse rikke korral helistada telefoninumbril, et teatada, et võrk
ATMEGA328 alglaaduri programmeerimiskilp Arduino Uno jaoks: 3 sammu (piltidega)
ATMEGA328 alglaaduri programmeerimiskilp Arduino Uno jaoks: ATMEGA328P alglaaduri programmeerimiskilp Arduino Uno jaoks Mõnikord juhtub see ja kahjustate oma Arduino Uno Atmega328P mikroprotsessorit. Saate protsessorit vahetada. Kuid kõigepealt peab see programmeerima alglaaduri. Nii et see õpetus selle valmistamiseks
HC - 06 (alammoodul) "NAME" muutmine ilma kasutamiseta "Monitor Serial Arduino" mis "töötab lihtsalt": veatu viis!: 3 sammu
HC - 06 (alammoodul) "NAME" muutmine ilma kasutamiseta "Monitor Serial Arduino" … mis "töötab lihtsalt": veatult!: Pärast " Pikka aega " proovides nime muuta HC -06 (alammoodul), kasutades " Arduino seeriamonitor, ilma " Edu " Leidsin veel ühe lihtsa viisi ja nüüd jagan! Lõbutsege sõbrad
Parem siis " Raven " või Annoy-a-tron . Tasuta !!!: 3 sammu
Parem siis " Raven " või Annoy-a-tron …. Tasuta !!!: Siin ma ütlen teile 3 lihtsa sammuga, kuidas kasutada sääski, programmi, mis on teie mobiiltelefoni jaoks ja ei maksa absoluutselt raha !!! (see on minu esimene lollus: D