
Mikroelektroonika on olnud viimaste aastate moeröögatus, tĂ€nu vĂ”luvale Arduino'le. Kuid probleem on see, et kui huvi on piisav, siis kasvab DigitalWrite() kasutamine kiiresti, aga mis edasi teha, ei ole pĂ€ris selge. Arduino arendajad on teinud palju, et vĂ€hendada takistusi nende ökosĂŒsteemi sisenemisel, kuid selle piirest vĂ€ljaspool lehvivad veel metsikud skeemide maailmad, mis on entusiastidele raskesti ligipÀÀsetavad.
NĂ€iteks andmelehed. Tundub, et neis on kĂ”ik olemas - vĂ”ta ja kasuta. Kuid nende autorid ei paku sageli plaanitult mikrokontrollerite populariseerimist; mĂ”nikord tundub, et nad kuritarvitavad arusaamatuid termineid ja akronĂŒĂŒme lihtsate asjade kirjeldamisel, et segadusse ajada algajaid. Kuid kĂ”ik ei ole nii hull, kui soovida, avanevad uksed.
Selles artiklis jagan ma oma kogemusi humanitaarina andmelehtedega hobieesmĂ€rkidel. Tekst on mĂ”eldud neile, kes on ĂŒles kasvanud Arduino maailmast, eeldades, et on olemas mingi arusaam mikrokontrollerite tööpĂ”himĂ”tetest.
Alustan traditsioonilise
LED-i vilgutamisega Arduinos
Ja kohe kood:
void setup() {
DDRB |= (1<<5);
}
void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}"Mis see on? â KĂŒsib kogenud lugeja. â Miks sa kirjutad midagi sisendregister PINB? See on ju ainult lugemiseks!" TĂ”epoolest, , nagu ka enamik veebis olevaid Ă”ppeartikleid, vĂ€idab, et see register on lugemiseks. Ma ise arvasin ka nii, kuni lugesin uuesti Atmega328p dokumentatsiooni, valmistades seda artiklit. Ja seal:

See on suhteliselt uus funktsioon, mida ei olnud Atmega8-l, ja millest ei pruugita kÔik teavad vÔi ei mainita seda tagasipöörduvuse tÔttu. Aga see on tÀiesti sobiv, et demonstreerida mÔtet, et andmelehti tasub lugeda, et kasutada Àra kÔiki kiibi vÔimalusi, sealhulgas vÀhemtuntud. Ja see ei ole ainus pÔhjus.
Miks veel lugeda andmelehti
Tavaliselt hakkavad Arduino entusiastid, pĂ€rast LED-idega ja AnalogWrite'idega mĂ€ngimist, ĂŒhendama plaadiga erinevaid mooduleid ja kiipe, mille jaoks on juba kirjutatud teegid. Varem vĂ”i hiljem ilmub teek, mis ei tööta nii, nagu oleks vaja. Siis hakkab hobikohtunik seda tuhnima, et seda parandada, ja sealâŠ
Seal toimub midagi ĂŒlimalt arusaamatut, mistĂ”ttu tuleb minna Google'i, lugeda arvukalt Ă”petusi, haarata tĂŒkkide kaupa kellegi sobivat koodi ja lĂ”puks oma tahtmist saavutada. See toob kaasa tugeva saavutuse tunde, kuid tegelikult meenutab see jalgratta leiutamist mootorratta tagasikerimise teel. Ja arusaamine, kuidas see jalgratas töötab, ei suurene. Tean, kuna olen sellega ĂŒsna kaua tegelenud.
Kui oleksin selle pĂ”neva tegevuse asemel veetnud paar pĂ€eva Atmega328 dokumentatsiooni Ă”ppimisele, oleksin sÀÀstnud tohutult aega. LĂ”ppude lĂ”puks, see on ĂŒsna lihtne mikrokontroller.
Seega on andmelehtede lugemine vajalik vĂ€hemalt selleks, et saada aimu, kuidas mikrokontroller ĂŒldse töötab ja mida ta suudab teha. Ja veel:
et kontrollida ja optimeerida teiste teeke. Need kirjutavad sageli samasugused entusiastid, kes leiutavad jalgratast; vÔi siis, vastupidi, autorid teevad tahtlikult neist liialdatud kaitse, et rohi oleks kolm korda rohkem ja aeglasem, kuid see kindlasti töötab;
et olla vÔimeline kasutama projektis kiipe, mille jaoks keegi ei ole teeki kirjutanud;
et endale lihtsustada ĂŒlesannet ĂŒleminemisel ĂŒhe mikrokontrolleri seeriast teise;
et lÔpuks optimeerida oma vana koodi, mis ei mahtunud Arduinosse;
et Ôppida, kuidas otseselt suhelda igasuguste kiipidega nende registrite kaudu, ilma et peaksin uurima nende teekide struktuuri, kui need eksisteerivad.
Miks kirjutada registreid otse, kui on olemas HAL ja LL?
SÔnastik
HAL, High Abstraction Layer â mikrokontrolleri juhtimise teek kĂ”rge abstraktsioonitasemega. Kui on vaja kasutada SPI1 liidest, seadistame lihtsalt ja aktiveerime SPI1, mĂ”tlemata, millised registrid mille eest vastutavad.
LL, Low Level API â teek, mis sisaldab makrosid vĂ”i struktuure registrite aadressidega, vĂ”imaldades neile viidata nime kaudu. DDRx, PORTx, PINx Atmega-l on LL.
Arutelud teemal «HAL, LL vÔi registrid» toimuvad pidevalt kommentaarides Habras. Ilma astraliteadusele juurdepÀÀsu nÔudmata jagan lihtsalt oma hobitegevuse kogemusi ja mÔtteid.
PĂ€rast mĂ”ningast tutvumist Atmega ja lugemist STM32 ilu kohta ostsin ma pool tosinat erinevat plaati â nii Discovery, kui ka "Sinised Tabletid" ning isegi tavalisi kiipe oma projektide jaoks. KĂ”ik need kaks aastat tolmu kogusid karbis. Vahel ĂŒtlesin endale: "NĂŒĂŒd alustan STM Ă”ppimist", kĂ€ivitades CubeMX, genereerides SPI seade, vaadates saadud tekstimĂŒĂŒri, mis oli rohkelt STM autoriĂ”igustega maitsestatud, ja otsustasin, et see on kuidagi liiga keeruline.

CubeMX-s kirjutatuga tutvuda on muidugi vÔimalik. Kuid samas on aru saadav, et kÔiki formuleeringuid meeles pidada ja hiljem kÀega kirjutada on ebareaalne. Ja kui ma juhuslikult unustan Cube-s mingit mÀrkeruutu sisse tÔmmata, siis selle debugimine on tÀiesti teema.
Kaks aastat on möödunud, ma ikka veel vaatan ahnelt erinevate maitsvate, kuid mulle arusaamatute kiipide poole ja juhtumisi leidsin , kuigi STM8 kohta. Ja ĂŒtleb ĂŒhtĂ€kki mĂ”istsin, et olen kogu selle aja pĂŒĂŒdnud avatud ust: STM registrid on sarnased teiste MK-de registritega ja nende kasutamiseks ei ole Cube'i tarvis. Mis, nii sai teha?..
HAL ja spetsiifiliselt STM32CubeMX on professionaalide tööriist, kes tegelevad tihedalt STM32 kiipidega. Peamine funktsioon on kĂ”rge abstraktsioonitase, vĂ”imalus kiiresti migreeruda ĂŒhelt MK-lt teisele ja isegi ĂŒhelt sĂŒdamikult teisele, jÀÀdes STM32 tootegruppi. Huvilised kohtuvad selliste ĂŒlesannetega harva â meie MK valik on tavaliselt piiratud AliExpressi sortimendiga ning me migreerume tihedamini kardinaalselt erinevate kiipide vahel â nĂ€iteks ĂŒmber Atlmega STM-ile, STM-lt ESP-le vĂ”i mis iganes uut Hiina sĂ”brad meile pakuvad. HAL ei aita siin, ja selle Ă”ppimisele kulub ĂŒsna palju aega.
JÀÀb LL â kuid sellest registriteni on ainult ĂŒks samm. Isiklikult leian, et oma makrode kirjutamine registri aadressidega on kasulik: uurin andmelehte tĂ€helepanelikumalt, mĂ”tlen, mida mul tulevikus vajab, ja mis kindlasti mitte, struktuurin oma programme paremini ning ĂŒldiselt aitab edasiviimine mĂ€lestude meeles hoidmisel.
Lisaks on levinud STM32F103 puhul nĂŒanss â sellel on kaks ĂŒksteisega mittesobivat LL versiooni, ĂŒks ametlik STM-ilt ja teine â Leaf Labs'ilt, mida kasutatakse projektis STM32duino. Kui kirjutada avatud lĂ€htekoodiga raamatukogu (ja see oli mul just ), tuleb kas teha kaks versiooni vĂ”i pöörduda otse registrite poole.
KokkuvĂ”ttes, LL-st loobumine, minu arvates, lihtsustab migreerimist, eriti kui alustada selle mĂ”ttega projekti algusest peale. Ăks ÀÀrmuslik nĂ€ide: kirjutame Arduinoga blink Atmel Studios ilma LL-ita:
#include <stdint.h>
#define _REG(addr) (*(volatile uint8_t*)(addr))
#define DDR_B 0x24
#define OUT_B 0x25
int main(void)
{
volatile uint32_t k;
_REG(DDR_B) |= (1<<5);
while(1)
{
_REG(OUT_B) |= (1<<5);
for (k=0; k<50000; k++);
_REG(OUT_B) &= ~(1<<5);
for (k=0; k<50000; k++);
}
}Et see kood paneks LEDi vilkuma Hiina plaadil STM8-l (ST Visual Desktopist), piisab, kui muuta kahte aadressi:
#define DDR_B 0x5007
#define OUT_B 0x5005Jah, ma kasutan selle konkreetse plaadi LEDi ĂŒhendamise eripĂ€ra, see vilgub vĂ€ga aeglaselt, aga ikkagi vilgub!
Milliseid andmelehti on olemas
Artiklite ja foorumite, nii vene- kui ingliskeelsete, all mĂ”istetakse "andmelehti" igasugust tehnikadokumentatsiooni kiipide kohta, ja mina teen seda ka selles tekstis. Formaalselt on nad vaid ĂŒks kujund andmelehtedest:
Datasheet â tehnilised nĂ€itajad, taktikalised-tehnilised omadused. Peab olema igal elektroonilisel komponendil. Abiteave, mille hoidmine kĂ€epĂ€rast on kasulik, kuid sĂŒvenenult ei ole seal eriti lugemist. Siiski, lihtsad kiibid piirduvad sageli andmelehega, et mitte toota liigseid dokumente; sel juhul Viidatud kĂ€siraamat lisatakse siia.
Viidatud kĂ€siraamat â ise juhend, suur raamat ĂŒle 1000+ lehe. Ăksikasjalikult kirjeldatakse kĂ”iki asju, mis on kiibi sees. Peamine dokument mikrokontrolleri Ă”ppimiseks. Erinevalt datasheet, juhendeid kirjutatakse laiale MK valikule, nad sisaldavad palju teavet periferaali kohta, mida sinu konkreetne mudel ei pruugi sisaldada.
ProgrammeerimismanuĂĄln vĂ”i Instruction Set Manual â unikaalsete mikrokontrolleri kĂ€skude juhend. MĂ”eldud neile, kes programmeerivad assembleris. Kompilaatorite autorid kasutavad seda aktiivselt koodi optimeerimiseks, seega ei ole see tavaliselt meil vajalik. Kuid siia piilumine on kasulik, et saada ĂŒldine arusaam, mĂ”ne spetsiifilise kĂ€su kohta, nagu katke-vĂ€ljumine ja ka aktiivse debuggeri kasutamisel.
Application Note â kasulikud nĂ€punĂ€ited konkreetsete ĂŒlesannete lahendamiseks, sageli koodinĂ€idete jaotamisega.
Errata Sheet â juhised mittestandardse kĂ€itumise kohta kiibi kohta koos vĂ”imalike lahendustega, kui need on olemas.
Mida andmelehtedes leidub
Otse Datasheet vÔime vajada selliseid jaotisi:
Device Summary â andmelehe esimene lehekĂŒlg annab lĂŒhikese ĂŒlevaate seadmest. VĂ€ga kasulik olukordades, kui oled kusagil leidnud kiibi (nĂ€inud poes, vĂ€lja vĂ”tnud, kohtunud mainimisega) ja soovid mĂ”ista, mis see on.
General Description â ĂŒksikasjalikum kirjeldus kiipide vĂ”imalustest Vinest.
Pinouts â pinna jaotuse skeemid kĂ”ikide vĂ”imalike kiibi korpuste jaoks (millisel jalal milline pin).
Pin Description â iga pini mÀÀratlemise ja vĂ”imaluste kirjeldus.
MĂ€lu kaart â aadresside kaart mĂ€lus ei pruugi olla vajalik, kuid mĂ”nikord sisaldab see ka registriblokkide aadresside tabelit.
Register kaart â registriblokkide aadresside tabel, mis asub tavaliselt andmelehe, kuid Ref Manual â ainult nihked (aadressi nihked).
Elektrilised omadused â sellel jaotisel huvitavad meid kĂ”igepealt absolute maximum ratings, mis loetleb kiibile maksimaalsed koormused. Erinevalt purunematust Atmega328p-st, enamik mikrokontrollereid ei luba pinna kĂŒlge tĂ”siseid koormusi ĂŒhendada, mis osutub arduino kasutajate jaoks ebameeldivaks ĂŒllatuseks.
Pakendi teave â saadaval olevate korpuste joonised, mis on kasulikud oma plaatide projekteerimisel.
Viidatud kĂ€siraamat struktuuriliselt koosneb jaotistest, mis on pĂŒhendatud konkreetsele periferiale, nagu on mĂ€rgitud nende pealkirjades. Iga peatĂŒki vĂ”ib tinglikult jagada kolme ossa:
Ălevaade, Tutvustus, Funktsioonid â periferaalide vĂ”imaluste ĂŒlevaade;
Funktsionaalne kirjeldus, Kasutusjuhend vĂ”i lihtsalt jaotise pĂ”hiosa â detaliseeritud tekstiline kirjeldus periferaali toimimisprincipidest ja selle kasutamise meetoditest;
Registrid â juhtimisregistrite kirjeldus. Lihtsate juhtumite, nagu GPIO vĂ”i SPI puhul, vĂ”ib sellest piisata, et periferaali alustada, kuid sageli peab siiski lugema ka eelnevaid osi.
Kuidas andmelehti lugeda
Andmelehed vÔivad alguses hirmutada oma suuruse ja arusaamatute sÔnade rohkuse tÔttu. Tegelikult ei ole kÔik nii hirmus, kui teada mÔningaid nippe.
Installige hea PDF-lugeja. Andmelehed on kirjutatud vanade paberjuhendite traditsioonides, neid on tore printida, plastikust mĂ€rkmepaberite vahele panna ja siduda. HĂŒperskeeme leidub seal vaid jĂ€lgede kogustes. Ănneks, vĂ€hemalt dokumendi struktuur on vormistatud jĂ€rjehoidjatega, seega on hea lugemine, millel on mugav navigeerimine, vĂ€ga vajalik.
Andmeleht ei ole Stroustrupi Ă”pik, seda ei pea lugema jĂ€rjestikku. Kui kasutasite eelmist nĂ”uannet â leidke lihtsalt vajaminev jaotis jĂ€rjehoidjate paneelilt.
Andmelehed, eriti Viidatud juhendite, vÔivad kirjeldada mitte kindla kiibi, vaid kogu tootesarja. See tÀhendab, et pool vÔi isegi kaks kolmandikku teabest ei pruugi olla seotud teie kiibiga. Enne TIM7 registrite uurimist kontrollige, General Descriptionkas see on teil olemas.
Teada inglise keelt on piisavalt pĂ”hitasemel. Andmelehed koosnevad pooleldi terminoloogiast, mis on keskmisele keelekĂ”nelejale tundmatu, ja pooleldi â lihtsatest siduvast struktuuridest. Samuti on olemas suurepĂ€rased hiina andmelehed hiina inglise keeles, kus pool on samuti termineid ja teine pool on juhuslik sĂ”nade kogum.
Kui kohtate tundmatut sÔna, Àrge pange seda inglise-vene sÔnaraamatuga tÔlkima. Kui teid segadusse ajab hysteresis, siis tÔlge 'gisteres' ei tee teid soojemaks. Kasutage Google'i, Stack Overflow'd, Vikipeediat, foorumeid, kus vajaminev mÔiste on .
Parim viis loetu mĂ”istmiseks â katsetada seda praktikas.Seega hoidke kĂ€epĂ€rast arenduspaneeli, millega tutvute, vĂ”i veel parem â kaht, juhul kui midagi jÀÀb arusaamatuks ja nĂ€ete maagilist suitsu.
Kasulik on harjumus hoida andmelehte kĂ€epĂ€rast, kui loete kellegi Ă”petust vĂ”i uurite kellegi teise raamatukogu. TĂ”enĂ€oliselt leiate sealt optimaalsema lahenduse oma probleemile. Ja vastupidi â kui andmeleht ei ava teie jaoks, kuidas register töötab, google'ige seda: tĂ”enĂ€oliselt on keegi juba kĂ”ik lihtsate sĂ”nadega kirjeldanud vĂ”i jĂ€tnud arusaadava koodi GitHubi. MĂ”ned kasulikud sĂ”nad ja tĂ€hendused, mis aitavad andmelehtedega kiiremini kohaneda. Midagi, mis meelde tuli viimase paari pĂ€eva jooksul, tĂ€iendused ja parandused on oodatud.
SÔnastik
Elektromagnetism
Vcc
Vdd, â "pluss", toide Vss
Vss, Vee â "miinus", maa
current â vool
pinget tÔmmata voolu
â töötama "maana" vĂ€lise koormuse jaoks to source current
â toita vĂ€list koormust high sink/source pin
â pin, millel on suurenenud "koormuse taluvus" â kehaga taluv pin
IO
H, kĂ”rge â pinal Vcc
L, madal â pinal Vss
High Impedance, Hi-Z, ujuv â pinal ei olegi midagi, "kĂ”rge takistus", see on tegelikult vĂ€lismaailmale nĂ€htamatu.
nĂ”rk tĂ”mbamine, nĂ”rk tĂ”ukamine â sisseehitatud tĂ”ukerihm, umbkaudne analoog 50 kΩ (vt andmelehte). Kasutatakse nĂ€iteks, et sisendpin ei rippuks Ă”hus, tekitades vale aktiveerimise. NĂ”rk â kuna selle on lihtne "ĂŒlekanda".
push pull â vĂ€ljundreĆŸiim pinal, kus see vahetub KĂ”rge ja Madal â tavaline VĂ€ljund Arduinoga.
open drain â vĂ€ljundreĆŸiimi tĂ€histus, kus pin vĂ”ib olla kas Madal, vĂ”i High Impedance / Ujuv. Peaaegu alati ei ole see siiski "pĂ€ris" avatud, seal on kaitse dioodid, takistid jne. See on lihtsalt maapinna/reĆŸiimi tĂ€histus.
pĂ€ris avatud drenaaĆŸ â aga see on juba pĂ€ris avatud drenaaĆŸ: pistik viib otse maapinnale, kui see on avatud, vĂ”i on riputatud olekus, kui see on suletud. See tĂ€hendab, et selle kaudu saab vajadusel lasta pinget suurem kui Vcc, kuid maksimaalne on ikka mÀÀratud andmelehe osas Absoluutne maksimaalne reiting / Pinge.
Liidesed
sarjas â ĂŒhendatud jĂ€rjestikku
ahelasse â mikrokiipe jĂ€rjestikku ĂŒhendades, suurendades vĂ€ljundite arvu.
nihke â nihke, tavaliselt tĂ€hendab see bitnihku. Seega sisenema nihkesse ja vĂ€lja nihkesse â andmete vastuvĂ”tmine ja edastamine bititi.
kinnihoidja â tĂ”ke, mis katab puhvri, kuni bitid on nihkesse tĂ”ugatud. Kui edastus on lĂ”ppenud, avatakse tĂ”ke ja bitid hakkavad tööle.
kellasse sisenema â teostada bitipĂ”hine edastus, nihutada kĂ”ik bitid Ă”igesse kohta.
topeltpuhver, varjatud register, eelregistir â ajalugu, kui register peab suutma vastu vĂ”tta uusi andmeid, kuid hoidma neid mingil hetkel kinni. NĂ€iteks, et PWM töötaks Ă”igesti, ei tohiks selle parameetrid (tĂ€psus, sagedus) muutuda enne, kui kĂ€esolev tsĂŒkkel on lĂ”ppenud, kuid uued parameetrid vĂ”ivad juba olla edastatud. Seega, kĂ€esolevad hoitakse varjatud register, kuid uued jĂ”uavad eelregistir, olles kirjutatud vastavasse mikrokiibi registrisse.
Igal juhul
eeljaotur â sageduse eeljagaja
bit seada â seada bit 1-ks
bit kustutada/taastada â lĂ€htestada bit 0-ks (reset â STM andmelehtede omadus)
Mis edasi
Alguses plaaniti praktilist osa, mille raames demonstreeritakse kolme projekti STM32 ja STM8, mis on spetsiaalselt selle artikli jaoks loodud andmelehtede abil lambikeste, SPI, taimerite, PWM-i ja katkemistega:

Aga teksti tuleb liiga palju, seega saadetakse projektid teise ossa.
Andmelehtede lugemise oskus aitab teil teie hobis, kuid tĂ”enĂ€oliselt ei asenda see elavat suhtlemist kolleegidega foorumites ja vestlustes. Selleks peab ikkagi peamiselt inglise keelt harima. Seega, neile, kes on lugenud lĂ”puni â eriline auhind: kaks tasuta tundi Skyengis esmakordse tasumise puhul koodiga HABR2.
Allikas: habr.com
