Satura rādītājs:

Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju savā "zilajā tabletē" Tātad, kas tagad?: 7 soļi
Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju savā "zilajā tabletē" Tātad, kas tagad?: 7 soļi

Video: Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju savā "zilajā tabletē" Tātad, kas tagad?: 7 soļi

Video: Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju savā
Video: BEST Sprained Big Toe Joint Treatment [Turf Toe Treatment & Exercises] 2024, Jūlijs
Anonim
Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju
Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju
Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju
Tātad, jūs ielādējat STM32duino sāknēšanas ielādētāju

Ja jūs jau esat izlasījis manu pamācību, kurā paskaidrots, kā ielādēt STM32duino sāknēšanas ielādētāju vai jebkuru citu līdzīgu dokumentāciju, mēģiniet ielādēt koda piemēru un…., Iespējams, nekas nenotiek.

Problēma ir tā, ka daudzi, ja ne visi "vispārīgā" STM32 piemēri nedarbosies. Būs nepieciešamas nelielas izmaiņas, lai pēc tam varētu strādāt savā STM32 "Blue Pill" panelī.

Es izvēlos 4 koda piemērus, lai izskaidrotu, kas ir jāmaina un kāpēc. Kodi ir šādi: "BlinkWithoutDelay", "Fading", "Dimmer" un "AnalogInSerial".

Ņemiet vērā, ka es neko neesmu kodējis. Es tikai izdodu nelielas izmaiņas kodos, ko izveidoja:

David A. Mellis un vēlu modificēja Toms Igoe, Marti Bolivar un dažos gadījumos Scott Fitzgerald

Tom Igoe un vēlu modificēja Bryan Newbold

Tāpēc es labprātāk saglabātu autoru vārdus pat modificētajos kodos, saglabājot radīšanas kredītu.

1. darbība: tapas un tapas… Kāpēc kods nedarbojas?

Tapas un tapas… Kāpēc kods nedarbojas?
Tapas un tapas… Kāpēc kods nedarbojas?

Ieskatīsimies STM32 zilās tabletes tapā. Piezīmju tapas tiek identificētas kā PA1 vai PC2… kaut kas līdzīgs.

Ja ieskatāties, piemēram, "BlinkWithoutDelay" koda piemērā, pin tiek deklarēts kā "33" … Kāpēc?

Man ir aizdomas, ka tas ir tāpēc, ka Marti Bolivar kungs pārnesa šo kodu uz MAPLE plates.

Es domāju, ka viņa nodoms nebija ļaut kodam savietojams ar "Blue Pill" dēļiem.

Maple un Maple mini dēļa tapas ir deklarētas skaitliski, piemēram, Arduino, lai gan tajās tiek izmantoti tādi skaitļi kā 33, 24 un daži šādi.

Es teicu, ka kods nedarbojas? Mana kļūda. Kodu apkopojiet bez kļūdām un pareizi augšupielādējiet "Blue Pill", tāpēc, manuprāt, tas patiešām darbojas, taču, izmantojot GPIO izvadi, mēs to negaidām. Var pat nebūt pieejams.

Tāpēc ir jāveic nelielas izmaiņas kodā, lai tas darbotos, kā paredzēts.

2. darbība: definēsim dažas tapas…

Pieņemsim
Pieņemsim

Laba koda prakse ir deklarēt resursus kā viegli identificējamus vai nozīmīgus mainīgos vai konstantes. Tas ļaus jums vieglāk saprast kodu un novērst problēmas.

Es izmantoju deklarēt Arduino tapas šādi:

const int ledPin = 13;

…"

Ja jums patīk es, varbūt jūs sev jautājat: "Kā es varu deklarēt tapas ar tādiem nosaukumiem kā PC13 ???"

Atbilde ir šāda: izmantojiet "#define" C paziņojumu.

Tātad, saskaņā ar pinout zīmējumu, PC13 ir tapa, kas mums ir uz LED BluePill. Lai to izmantotu, es paziņoju šādi, tieši pēc bibliotēku definīcijas (#include…) un pirms visa cita:

#define LedPin PC13

…"

Ņemiet vērā, ka NAV ";" līnijas pārtraukšana, NOR "=" piešķiršana.

Salīdziniet abus kodus. Viens ir oriģinālais piemērs, kas ielādēts no IDE. Otrais ir tas, kuru es nedaudz pielāgoju darbam ar "BluePill".

Es ļoti iesaku kodā deklarēt visas tapas, kuras plānojat izmantot. Pat tie, kas plāno izmantot kā ADC ievadi (vairāk par to vēlāk).

Tas atvieglos jūsu dzīvi.

3. darbība: PinMode ()… Kā jūs izmantosit tapas…

Pirms turpināt, ļaujiet saprast PinMode () funkciju.

Tāpat kā Arduino, arī STM32 tapām ir vairākas funkcijas. Vienkāršākais veids, kā izvēlēties vienu vai otru, ir PINMode () paziņojuma izmantošana.

Arduino ir pieejami tikai 3 režīmi: INPUT, OUTPUT vai INPUT_PULLUP.

Savukārt STM32 ir daudz pinMode () garšu. Viņi ir:

OUTPUT -Pamata digitālā izeja: ja tapa ir HIGH, spriegums tiek turēts pie +3,3 V (Vcc), un, kad tas ir LOW, tas tiek novilkts līdz zemei

OUTPUT_OPEN_DRAIN -Atvērtā kanalizācijas režīmā tapa norāda uz “zemu”, pieņemot strāvas plūsmu uz zemi, un “augstu”, nodrošinot paaugstinātu pretestību

INPUT_ANALOG -Šis ir īpašs režīms, kad tapa tiks izmantota analogo (nevis digitālo) lasījumu veikšanai. Ļauj veikt ADC pārveidošanu spriegumam pie tapas

INPUT_PULLUP -tapas stāvoklis šajā režīmā tiek ziņots tāpat kā ar INPUT, bet tapas spriegums tiek maigi “pavilkts uz augšu” virzienā uz +3.3v

INPUT_PULLDOWN -tapas stāvoklis šajā režīmā tiek ziņots tāpat kā ar INPUT, bet tapas spriegums tiek maigi “pavilkts uz leju” virzienā uz 0v

INPUT_FLOATING -INPUT sinonīms

PWM -Šis ir īpašs režīms, kad tapa tiks izmantota PWM izvadei (īpašs digitālās izvades gadījums)

PWM_OPEN_DRAIN -līdzīgi kā PWM, izņemot to, ka LOW un HIGH ciklu maiņas vietā spriegums uz tapas sastāv no mainīgiem LOW un peldošiem (atvienotiem) cikliem

(piezīme: izvilkts no vietnes

Es tikai atveru šo iekavu, jo, kad sākat veidot savu kodu, uzmanieties, lai savām vajadzībām izmantotu pareizo pinMode ().

4. solis: AnalogWrite () pret PwmWrite ()… Analogā izvade 2 garšās

AnalogWrite () pret PwmWrite ()… Analogā izvade 2 garšās
AnalogWrite () pret PwmWrite ()… Analogā izvade 2 garšās
AnalogWrite () pret PwmWrite ()… Analogā izvade 2 garšās
AnalogWrite () pret PwmWrite ()… Analogā izvade 2 garšās

Pirms "Blue Pill" GPIO tapas lietošanas ir jāpaziņo tā uzvedība, t.i., kā tā darbosies. Funkcija pinMode () darbojas tieši tā.

Tātad, tagad koncentrēsimies uz to, kā pareizi iestatīt analogo izvadi. To var deklarēt kā OUTPUT vai PWM režīmu.

Tādā pašā veidā analogās vērtības var attiecināt uz GPIO divos veidos: analogWrite () vai pwmWrite (), BET, analogWrite () darbosies tikai tad, ja pinMode () = OUTPUT. No otras puses, pwmWrite () darbosies tikai tad, ja pinMode () = PWM.

Ņemsim, piemēram, PA0: tas ir analogās/pwm izejas kandidāts.

analogWrite (): tas paziņo šādi:

….

#define ledPin PA0

pinMode (ledPin, OUTPUT);

analogWrite (ledPin, <numurs>);

……"

kur skaitlim jābūt no 0 līdz 255, piemēram, Arduino. Patiesībā tas ir savietojams ar Arduino.

pwmWrite (): deklarējiet šādi:

#define ledPin PA0

pinMode (ledPin, PWM);

pwmWrite (ledPin, <numurs.>);

…."

Ja skaitlim jābūt no 0 līdz 65535, izšķirtspēja ir daudz augstāka nekā Arduino.

Attēlos ir iespējams salīdzināt 2 kodus. Jūs varat arī redzēt oriģinālo kodu.

5. darbība: STM32 sērijas komunikācija

STM32 sērijas sakari
STM32 sērijas sakari

Apskatīsim, kā ir sakārtotas USART saskarnes STM32. Jā, saskarnes daudzskaitlī ….

"Blue Pill" ir 3 USART (RX/ TX 1 ~ 3), un, ja jūs izmantojat sāknēšanas ielādētāju, varat izmantot USB, tas nav savienots ar nevienu no tiem.

Atkarībā no tā, vai izmantojat vai neizmantojat USB, kodā vienā vai otrā veidā ir jādeklarē seriālais ports.

1. gadījums: izmantojot USB:

Tādā veidā skices tiek lejupielādētas tieši, izmantojot USB. Nav nepieciešams pārvietot BOOT0 džemperi uz 1 pozīciju un atpakaļ uz 0.

Šajā gadījumā ikreiz, kad deklarējat “Sērijveida” bez indeksa, tas nozīmē saziņu, izmantojot USB.

Tātad, Serial1 nozīmē TX/ RX 1 (tapas PA9 un PA10); Sērija2 nozīmē TX/ RX 2 (tapas PA2 un PA3) un sērija 3 nozīmē TX/ RX 3 (tapas PA10 un PA11).

Šādi mēs strādājam. Es sniegšu izmaiņas šī kodēšanas veida piemēros.

Vēl viena lieta: "Serial USB" nav jāinicializē. Citiem vārdiem sakot, "… Serial.begin (15200);" nav nepieciešams.

Ir iespējams izsaukt jebkuru sērijas funkciju (Serial.read (), Serial.write () utt.) Bez inicializācijas.

Ja kāda iemesla dēļ tas ir kodā, kompilators to ignorēs.

2. gadījums: TTL sērijas izmantošana USB adapterim:

Šādā veidā sāknēšanas ielādētājs neatbalsta vietējo STM32 USB komunikāciju, tāpēc, lai augšupielādētu skices, ir nepieciešams USB seriālais adapteris, kas savienots ar TX/ RX 1 (tapas PA9 un PA10).

Šajā gadījumā jebkurš laiks, kad sērija bez indeksa ir kods, nozīmē TX/ RX1 (ports, ko izmanto koda augšupielādei). Tātad, Serial1 attiecas uz TX/ RX 2 (tapas PA2 un PA3), un Serial2 attiecas uz TX/ RX 3 (tapas PA10 un PA11). Serial3 nav pieejams.

6. darbība: vērtības nodošana mikrokontrolleram

Vērtības nodošana mikrokontrolleram
Vērtības nodošana mikrokontrolleram

Dimmer piemērs ir vienkāršs veids, kā parādīt, kā nodot vērtību mikrokontrolleram.

Lai kontrolētu gaismas diodes spilgtumu, tā pieņem vērtību no 0 līdz 255.

Tas nedarbosies, kā paredzēts Blue Pill, jo:

  1. Lai izmantotu funkciju pwmWrite (), pinMode () IR JĀDEKLĒT kā PWM režīms.
  2. Jūs nekad nesaņemsiet veselu 3 ciparu skaitli. Funkcija Serial.read () uztver tikai bufera saturu, kas ir "BYTE". ja ierakstāt "100" un nospiediet "enter", tikai pēdējais "0" tiks uzņemts no bufera. Un tā vērtība būs "48" (decimālā ASCII vērtība "0"). Ja plānojat izdot vērtību "100", ir jāievada "d". Tātad, ir pareizi teikt, ka tas konvertēs ASCII simbola decimālo vērtību LED spilgtumā, vai ne?…. Nu, sava veida…
  3. Problēma, kartes vērtības tieši no Serial.read () funkcijas ir triks. Gandrīz noteikti iegūst negaidītas vērtības. Labāka pieeja ir krātuves bufera saturs pagaidu mainīgajā un TĀM kartēt.

Tāpat kā es paskaidroju iepriekš 2. punktā, kods, ko es ieviešu, ļaus ievadīt ASCII simbolu, un tas kontrolēs gaismas diodes spilgtumu, pamatojoties uz ASCII decimālo vērtību… piemēram, “atstarpe” ir vērtība 32 (patiesībā ir zemākā drukājamā rakstzīme, ko varat ievadīt) un "}" ir iespējams augstākais (vērtība 126). Citas rakstzīmes nav izdrukājamas, tāpēc terminālis nesapratīs vai tās ir iespējams rakstzīmju salikums (piemēram, “~” ir mirusi atslēga manā tastatūrā un nedarbosies pareizi). Tas nozīmē, ka šī saliktā rakstzīme, ievadot terminālī, nosūtīs pašu rakstzīmi un kaut ko citu. Parasti tas nav izdrukājams. Un vai šis pēdējais kods tiks uztverts. Paturiet prātā, ka jūsu terminālim šajā gadījumā NEDRĪKST sūtīt ne "Carriage Return", ne "Line Feed". Jums ir jāpievērš uzmanība tam, lai kods darbotos pareizi.

Ja jūs nokritāt, tas ir nedaudz mulsinoši, tas kļūst sliktākais ….

7. solis: Un ja es vēlētos ierakstīt trīs ciparus…. vai vēl vairāk ??

Un ja es gribētu ierakstīt trīs ciparus … vai vēl vairāk ??
Un ja es gribētu ierakstīt trīs ciparus … vai vēl vairāk ??

Vairāku rakstzīmju saņemšana no sērijas sakariem nav vienkāršs uzdevums.

Sērijas buferis ir FIFO baitu kaudze rakstzīmju. Jebkurā laikā, kad tiek izsaukta funkcija Serial.read (), pirmā nosūtītā ogle tiek noņemta no kaudzes un saglabāta citā vietā. Parasti koda mainīgais kodā. Piezīme. Atkarībā no aparatūras parasti ir taimauts, kā žurnāla buferis var saglabāt informāciju.

Ja plānojat sērijveidā ievadīt vairāk nekā vienu ciparu, jums būs "jāsastāda" virknes rakstzīme pēc rakstzīmes, jo tie nonāk UART buferī.

Tas nozīmē, ka riteņbraukšana nolasa katru bufera simbolu, saglabā temp mainīgajā, ielādē to virkņu masīva pirmajā pozīcijā, pāriet uz nākamo pozīciju un sāk no jauna, līdz … nu, atkarīgs no pielietojuma. Ir 2 veidi, kā pārtraukt ciklu:

  1. Izmantojot kādu "beigu zīmes" rakstzīmi, piemēram, "vagona atgriešanās" vai "rindas padeve". Tiklīdz tiek atrasts simbols “end Mark”, cilpa beidzas.
  2. Alternatīvi, rakstzīmju skaits virkņu ķēdē var būt ierobežots, tāpat kā interaktīvo ciklu skaits. Kad tas sasniedz robežu, teiksim, 4, iegūstiet ikdienas finišu pats.

Apskatīsim vienkāršu piemēru, kā to izdarīt:

  • Iestatiet “beigu” simbolu, piemēram, “\ n” (tas nozīmē līnijas plūsmas ASCII simbolu).
  • looping tikmēr Serial.available () ir patiess
  • Serial.read () saglabāšana rada pagaidu char mainīgo. Atcerieties: tiklīdz Serial.read () faktiski “nolasa” buferšķīdumu, tas ir tīrs un tajā tiek ielādēta nākamā rakstzīme.
  • palieliniet virknes mainīgo ar šo simbolu
  • Ja pēdējais simbols ir “beigas”, izejiet no cilpas.

Parasti sērijveida rakstzīmju masīva iegūšanas kārtība izskatās kā attēls.

Tā pamatā bija plašs Deivida A. Melisa sākotnējā koda pielāgojums.

Atbrīvojieties to izmantot un pārbaudīt. Atcerieties: vērtības ir jāievada 3 ciparu formātā.

Tas pagaidām. Es nepagarināšu sevi papildu sērijas sakaru detaļās. Tas ir pārāk sarežģīts, lai to apskatītu, un tas ir pelnījis savu Intructables.

Es ceru, ka tas palīdzēs jums izmantot piemērus Blue Pill un sniegs jums zināmu izpratni par pareizo kodu šai mazajai dēlei.

Tiekamies citos pamācībās.

Ieteicams: