Kiel kaj kial legi datumfoliojn se mikroregiloj estas via ŝatokupo

Kiel kaj kial legi datumfoliojn se mikroregiloj estas via ŝatokupo

Mikroelektroniko estas moda ŝatokupo en la lastaj jaroj danke al la magia Arduino. Sed jen la problemo: kun sufiĉe da intereso, vi povas rapide superi DigitalWrite(), sed kion fari poste ne estas tute klara. Arduino-programistoj multe klopodis malaltigi la baron al eniro en sian ekosistemon, sed ekster ĝi ankoraŭ estas malhela arbaro de severa cirkulado, kiu estas neatingebla por la amatoro.

Ekzemple, datumfolioj. Ŝajnas, ke ili havas ĉion, prenu kaj uzu ĝin. Sed iliaj aŭtoroj klare ne metas al si la taskon popularigi mikroregilojn; Kelkfoje ŝajnaske ili intence misuzas nekompreneblajn terminojn kaj mallongigojn priskribante simplajn aferojn por kiel eble plej konfuzi la neiniciatojn. Sed ne ĉio estas tiel malbona; se oni volas, la kesteto malfermiĝas.

En ĉi tiu artikolo mi dividos la sperton de homscienco-specialisto komunikanta kun datumfolioj por ŝatokupoj. La teksto estas destinita por amatoroj, kiuj kreskis de Arduino-pantalono; ĝi supozas iom da kompreno de la principoj de funkciado de mikroregiloj.

Mi komencos per la tradicia

Ekbrilante LED sur Arduino

Kaj tuj la kodo:

void setup() {
DDRB |= (1<<5);
}

void loop() {
PINB = (1<<5);
for (volatile uint32_t k=0; k<100000; k++);
}

"Kio estas ĉi tio? – Demandos altnivela leganto. – Kial vi skribas ion al la eniga registro PINB? Ĝi estas nur por legado!" Vere, Dokumentado de Arduino, kiel la plej multaj edukaj artikoloj en la Interreto, deklaras ke tiu ĉi registro estas nurlegebla. Mi mem pensis tiel ĝis mi relegis ĝin datumpaĝo al Atmega328p, preparante ĉi tiun artikolon. Kaj tie:

Kiel kaj kial legi datumfoliojn se mikroregiloj estas via ŝatokupo

Ĉi tio estas relative nova funkcio, ĝi ne estis sur Atmega8, ne ĉiuj scias pri ĝi aŭ ne estas menciita pro kialoj de retrokongruo. Sed ĝi estas sufiĉe taŭga por pruvi la ideon, ke datumfolioj estas legindaj por uzi ĉiujn kapablojn de la blato, inkluzive de malmulte konataj. Kaj ĉi tio ne estas la sola kialo.

Kial alie legi datumfoliojn?

Kutime, Arduino-inĝenieroj, sufiĉe ludinte per LED-oj kaj AnalogWrites, komencas konekti ĉiajn modulojn kaj blatojn al la tabulo, por kiu jam ekzistas skribitaj bibliotekoj. Pli aŭ malpli frue aperas biblioteko, kiu ne funkcias kiel ĝi devus. Tiam la amatoro komencas pluki ĝin por ripari ĝin, kaj tiam...

Kaj tie okazas io tute nekomprenebla, do vi devas iri al Guglo, legi multajn lernilojn, tiri partojn de ies taŭga kodo kaj finfine atingi vian celon. Ĉi tio donas potencan senton de realigo, sed fakte la procezo estas kiel reinventi la radon per inversa inĝenierado de motorciklo. Krome, la kompreno pri kiel ĉi tiu biciklo funkcias ne pliiĝas. Mi scias, ĉar mi mem faris tion dum sufiĉe longa tempo.

Se anstataŭ ĉi tiu ekscita agado mi estus pasiginta kelkajn tagojn studante la Atmega328-dokumentadon, mi ŝparus grandegan tempon. Post ĉio, ĉi tio estas sufiĉe simpla mikroregilo.

Tiel, vi devas legi datumajn foliojn almenaŭ por imagi kiel la mikroregilo ĝenerale funkcias kaj kion ĝi povas fari. Kaj plue:

  • kontroli kaj optimumigi aliulajn bibliotekojn. Ofte ili estas verkitaj de la samaj amatoroj, kiuj reinventas la radon; aŭ, male, la aŭtoroj intence faras ilin troe fuŝrezistaj. Ĝi estu trioble pli granda kaj malrapida, sed ĝi certe funkcios;

  • povi uzi blatojn en projekto por kiu neniu skribis bibliotekon;

  • por faciligi al vi migri de unu MK-linio al alia;

  • por finfine optimumigi vian malnovan kodon, kiu ne kongruis en Arduino;

  • lerni kiel kontroli ajnan blaton rekte tra ĝiaj registroj, sen ĝeni studi la strukturon de ĝiaj bibliotekoj, se ekzistas.

Kial skribi rekte al registroj kiam estas HAL kaj LL?

Vortprovizo
HAL, Alta Abstrakta Tavolo – biblioteko por kontroli mikroregilon kun alta nivelo de abstraktado. Se vi bezonas uzi la SPI1-interfacon, vi simple agordi kaj ebligi SPI1 sen pensi pri kiuj registroj respondecas pri kio.
LL, Malaltnivela API – biblioteko enhavanta makroojn aŭ strukturojn kun registradresoj, permesante al vi aliri ilin laŭnome. DDRx, PORTx, PINx sur Atmega estas LL.

Disputoj pri la temo "HAL, LL aŭ registroj" regule okazas en komentoj pri Habré. Sen pretendi aliron al astra scio, mi simple dividos mian amatoran sperton kaj pensojn.

Pli-malpli eltrovinte Atmega kaj leginte artikolojn pri la mirindaĵo de STM32, mi aĉetis duon dekduon da diversaj tabuloj - Discovery kaj Blue Pills, kaj eĉ nur blatojn por miaj memfaritaj produktoj. Ili ĉiuj kolektis polvon en skatolo dum du jaroj. Kelkfoje mi diris al mi: "Jen, mi regas STM ĉi-semajnfine", lanĉis CubeMX, generis aranĝon por SPI, rigardis la rezultan muron de teksto, malavare aromatigita per STM-kopirajtoj, kaj decidis, ke tio estas iel tro multe. .

Kiel kaj kial legi datumfoliojn se mikroregiloj estas via ŝatokupo

Kompreneble, vi povas ekscii, kion CubeMX skribis ĉi tie. Sed samtempe estas klare, ke memori ĉiujn vortumojn kaj poste skribi ilin mane estas nereala. Kaj por sencimigi ĉi tion, se mi hazarde forgesas marki skatolon en la Kubo, tio estas tute bone.

Du jaroj pasis, mi ankoraŭ lekas miajn lipojn ST MCU Finder por ĉiaj bongustaj, sed preter mia kompreno, blatoj, kaj hazarde trafis mirinda artikolo, kvankam pri STM8. KAJ subite Mi konstatis, ke dum ĉi tiu tuta tempo mi frapis malfermitan pordon: la registroj de la STM estas aranĝitaj same kiel tiuj de iu ajn alia MK, kaj la Kubo ne necesas labori kun ili. Ĉu eĉ estis eble?...

HAL kaj specife STM32CubeMX estas ilo por profesiaj inĝenieroj, kiuj laboras proksime kun STM32-blatoj. La ĉefa trajto estas altnivela de abstraktado, la kapablo rapide migri de unu MCU al alia kaj eĉ de unu kerno al alia, restante ene de la STM32-linio. Hobiistoj malofte renkontas tiajn problemojn - nia elekto de mikroregiloj, kutime, estas limigita al la AliExpress-sortimento, kaj ni ofte migras inter radikale malsamaj blatoj - ni moviĝas de Atmega al STM, de STM al ESP, aŭ kio ajn nova afero niaj ĉinaj amikoj. ĵetu sur nin. HAL ne helpos ĉi tie, kaj studi ĝin manĝos multe da tempo.

LL restas - sed de ĝi ĝis la registroj estas duonpaŝo. Persone, mi trovas utila skribi miajn makroojn kun registradresoj: mi pli zorge studas la datumfolion, mi pensas pri tio, kion mi bezonos estonte kaj kion mi certe ne faros, mi pli bone strukturas miajn programojn, kaj ĝenerale, superado helpas enmemorigi. .

Krome, estas nuanco kun la populara STM32F103 - estas du nekongruaj LL-versioj por ĝi, unu oficiala de STM, la dua de Leaf Labs, uzata en la projekto STM32duino. Se vi skribas malfermfontan bibliotekon (kaj mi havis ĝuste tia tasko), vi devas aŭ fari du versiojn, aŭ rekte aliri la registrojn.

Fine, forigi LL, laŭ mi, faciligas migradon, precipe se vi planas ĝin ekde la komenco de la projekto. Troiga ekzemplo: ni skribu Arduino palpebrumon en Atmel Studio sen LL:

#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++);
    } 
}

Por ke ĉi tiu kodo palpebrumu la LED sur ĉina tabulo kun STM8 (de ST Visual Desktop), sufiĉas ŝanĝi du adresojn en ĝi:

#define DDR_B 0x5007
#define OUT_B 0x5005

Jes, mi uzas funkcion konekti la LED sur specifa tabulo, ĝi palpebrumos tre malrapide, sed ĝi okazos!

Kiaj datumfolioj ekzistas?

En artikoloj kaj en forumoj, kaj rusaj kaj anglaj, "datumfolioj" signifas ajnan teknikan dokumentaron por blatoj, kaj mi faras la samon en ĉi tiu teksto. Formale, ili estas nur unu speco de tia dokumentaro:

Datumpaĝo – Agado-karakterizaĵoj, taktikaj kaj teknikaj trajtoj. Deviga por ajna elektronika komponanto. Fonaj informoj estas utilaj por konservi, sed ne estas multe por legi en ĝi penseme. Tamen, pli simplaj blatoj ofte estas limigitaj al datenfolio por ne produkti nenecesajn dokumentojn; tiuokaze Referenca Manlibro estas inkluzivita ĉi tie.

Referenca Manlibro – la instrukcioj mem, sana libro de 1000+ paĝoj. La laboro de ĉio, kio estas enŝlosita en la blaton, estas detale priskribita. La ĉefa dokumento por regi la mikroregilon. Male al datumpaĝo, instrukcioj estas skribitaj por larĝa gamo de MK-oj; ili enhavas multajn informojn pri ekstercentraj kiuj ne estas haveblaj en via specifa modelo.

Manlibro pri ProgramadoInstrukcia Aro Manlibro - instrukcioj por unikaj mikroregilaj komandoj. Desegnita por tiuj, kiuj programas en Asembla lingvo. Kompilaŭtoroj aktive uzas ĝin por optimumigi kodon, do en la ĝenerala kazo ni ne bezonos ĝin. Sed serĉi ĉi tie estas utila por ĝenerala kompreno, por iuj specifaj komandoj kiel eliro de interrompo, kaj ankaŭ por aktive uzi la erarserĉilon.

Aplika Noto – utilaj konsiletoj por solvi specifajn problemojn, ofte kun kodaj ekzemploj.

Erara Folio - priskribo de kazoj de ne-norma blatkonduto kun solvo-opcioj, se ekzistas.

Kio estas en la datenfolioj

Rekte al Datumpaĝo ni eble bezonos la jenajn sekciojn:

Aparato Resumo – la unua paĝo de la datenfolio mallonge priskribas la aparaton. Tre utila en situacioj, kiam vi trovis blaton ie (vidis ĝin en vendejo, lutis ĝin, trovis mencion) kaj volas kompreni kio ĝi estas.

Ĝenerala priskribo - pli detala priskribo de la kapabloj de la blatoj de la linio.

Pinouts – pinout-diagramoj por ĉiuj eblaj blatpakaĵoj (kiu pinglo estas sur kiu kruro).

Pingla Priskribo - priskribo de la celo kaj kapabloj de ĉiu pinglo.

Memora Mapo – ni verŝajne ne bezonos adresmapon en memoro, sed foje ĝi ankaŭ inkluzivas tabelon de registroblokaj adresoj.

Registri Mapon – la tabelo de adresoj de registroblokoj, kutime, troviĝas en la datenfolio, kaj en Ref Manlibro - nur deĵoroj (adreso kompensoj).

Elektraj Karakterizaĵoj – en ĉi tiu sekcio ni ĉefe interesiĝas absolutaj maksimumaj taksoj, listigante la maksimumajn ŝarĝojn per blato. Male al la nedetruebla Atmega328p, la plej multaj MK-oj ne permesas vin konekti gravajn ŝarĝojn al la pingloj, kio fariĝas malagrabla surprizo por Arduinistoj.

Paka Informo - desegnaĵoj de disponeblaj kazoj, utilaj dum desegnado de viaj tabuloj.

Referenca Manlibro strukture konsistas el sekcioj dediĉitaj al specifaj ekstercentraj indikitaj en sia titolo. Ĉiu ĉapitro povas esti dividita en tri partojn:

Superrigardo, Enkonduko, Trajtoj - superrigardo de ekstercentraj kapabloj;

Funkcia Priskribo, Gvidilo pri Uzado aŭ simple la ĉefa bloko de la sekcio - detala teksta priskribo de la principoj de la ekstercentra aparato kaj kiel uzi ĝin;

Registroj – priskribo de kontrolregistroj. En simplaj kazoj kiel GPIO aŭ SPI, ĉi tio povas esti sufiĉe sufiĉa por komenci uzi la ekstercentrajn, sed ofte vi ankoraŭ devas legi la antaŭajn partojn.

Kiel legi datumfoliojn

Datenfolioj, pro kutimo, timigas vin per sia volumeno kaj abundo de nekompreneblaj vortoj. Fakte, ĉio ne estas tiom timiga se vi konas kelkajn vivhakojn.

Instali bona PDF-legilo. Datenfolioj estas skribitaj laŭ la glora tradicio de paperaj instrukcioj; ili estas bonegaj por presi, enmeti per plastaj legosignoj kaj kudri. Hiperteksto en ili estas observita en spurkvantoj. Feliĉe, almenaŭ la strukturo de la dokumento estas desegnita per legosignoj, do taŭga leganto kun facila navigado estas tre necesa.

La datenfolio ne estas la lernolibro de Stroustrup; ĝi enhavas ne necesas legi ĉion. Se vi uzis la antaŭan konsilon, simple trovu la deziratan sekcion en la legosignbreto.

Datenfolioj, precipe Referencaj Manlibroj, povas priskribi la kapablojn de ne specifa blato, sed la tuta linio. Ĉi tio signifas, ke duono, aŭ eĉ du trionoj de la informoj ne rilatas al via blato. Antaŭ ol studi TIM7-registrojn, enregistru Ĝenerala priskribo, ĉu vi havas ĝin?

Sciu angla sufiĉas por baza nivelo. Datenfolioj konsistas duono el esprimoj nekonataj al la meza denaska parolanto, kaj duono el simplaj konektaj strukturoj. Estas ankaŭ bonegaj ĉinaj datenfolioj en la ĉina angla, kie duono estas ankaŭ terminoj, kaj la dua duono estas hazarda aro de vortoj.

Se vi renkontos nekonata vorto, ne provu traduki ĝin per angla-rusa vortaro. Se vi estas konfuzita histerezo, tiam la traduko “histerezo” ne varmos vin. Uzu Guglon, Stack Overflow, Vikipedion, forumojn, kie estos la postulata koncepto klarigita per simplaj vortoj kun ekzemploj.

La plej bona maniero kompreni kion vi legas estas kontroli en ago. Sekve, tenu ĉemane la sencimigan tabulon kun kiu vi konatiĝas, aŭ pli bone ankoraŭ du, se vi ankoraŭ miskomprenis ion kaj vidis magian fumon.

Estas bona kutimo teni vian datumfolion oportuna kiam vi legante ies lernilon aŭ studi la bibliotekon de iu alia. Estas tute eble, ke vi trovos en ĝi pli optimuman solvon al via problemo. Kaj inverse - se vi ne povas kompreni el la datenfolio kiel la registro efektive funkcias, guglos ĝin: plej verŝajne, iu jam priskribis ĉion per simplaj vortoj aŭ lasis klaran kodon en GitHub.

Vortprovizo

Kelkaj utilaj vortoj kaj simboloj por helpi vin rapide alkutimiĝi al datumfolioj. Kion mi memoris en la lastaj du tagoj, aldonoj kaj korektoj estas bonvenaj.

Elektro
VDC, Vere – “plus”, manĝaĵo
vss, vee – “minus”, tero
nuna – aktuala
tensio - tensio
mallevi fluon – labori kiel "grundo" por ekstera ŝarĝo
al fonto de kurento - potenco ekstera ŝarĝo
alta lavujo/fonta pinglo - pinglo kun pliigita "toleremo" por ŝarĝi

IO
H, Alta – sur la Vcc-pinglo
L, Malalta – sur la Vss-pinglo
Alta Impedanco, Saluton-Z, flosante – estas nenio sur la pinglo, "alta rezisto", ĝi estas preskaŭ nevidebla por la ekstera mondo.
malforta tiri supren, malforta tiri malsupren - enkonstruita tir-supren/tiri malsupren-rezistilo, proksimume ekvivalenta al 50 kOhm (vidu datenfolion). Ĝi estas uzata, ekzemple, por malhelpi la enigstifton de pendado en la aero, kaŭzante falsajn alarmojn. malforta - ĉar estas facile “interrompi” lin.
push pull - pinglo-eliga reĝimo, en kiu ĝi ŝanĝas inter alta и malalte - regula ELIGO de Arduino.
malfermita drenilo - nomo de la eligo-reĝimo en kiu la pinglo povas esti ĉu malalteAlta impedanco/Flosanta. Plie, preskaŭ ĉiam ĉi tio ne estas "reala" malfermita drenilo; estas protektaj diodoj, rezistiloj kaj aliaj. Ĉi tio estas simple nomo por grundo/neniu reĝimo.
vera malferma drenilo - sed ĉi tio estas vera malfermita drenilo: la pinglo kondukas rekte al la grundo se ĝi estas malfermita, aŭ restas en limbo se ĝi estas fermita. Ĉi tio signifas, ke se necese, tensio pli granda ol Vcc povas esti trapasita tra ĝi, sed la maksimumo ankoraŭ estas specifita en la datenfolio en la sekcio. Absolutaj Maksimumaj Taksoj/Tensio.

Interfacoj
en serio – konektita en serio
ĉeni – kunmeti blatojn en ĉenon uzante serian konekton, pliigante la nombron da eliroj.
movo – movo, kutime indikas iom movon. Respektive, translokiĝi enen и movi eksteren – ricevi kaj transdoni datumojn bito post bito.
seruro – klinko kiu kovras la bufron dum bitoj estas movitaj tra ĝi. Kiam la translokigo estas finita, la valvo malfermiĝas kaj la bitoj komencas funkcii.
horloĝi enen – faru iom post iom translokigon, movu ĉiujn pecojn al la ĝustaj lokoj.
duobla bufro, ombra registro, preŝargi registron – historiaj nomoj, kiam la registro devas povi akcepti novajn datumojn, sed teni ĝin ĝis iu momento. Ekzemple, por ke PWM funkciu ĝuste, ĝiaj parametroj (devociklo, ofteco) ne devus ŝanĝiĝi ĝis la nuna ciklo finiĝos, sed novaj parametroj jam povas esti translokigitaj. Sekve, la nunaj estas konservitaj ĉe ombra registro, kaj novaj falas en preŝargi registron, estante skribita al la ekvivalenta blatregistro.

Ĉiaj aferoj
preskaler – frekvenca preskaler
agordi iom - agordu biton al 1
por malbari/restarigi iom - restarigi biton al 0 (Restarigi - STM-datumfolio funkcio)

Kio sekvas

Ĝenerale, praktika parto estis planita ĉi tie kun pruvo de tri projektoj pri STM32 kaj STM8, faritaj specife por ĉi tiu artikolo uzante datumfoliojn, kun ampoloj, SPI, temporiziloj, PWM kaj interrompoj:

Kiel kaj kial legi datumfoliojn se mikroregiloj estas via ŝatokupo

Sed estas multe da teksto, do la projektoj estas sendataj al la dua parto.

La kapablo legi datumfoliojn helpos vin kun via ŝatokupo, sed verŝajne ĝi anstataŭigos vivan komunikadon kun kolegaj hobiistoj en forumoj kaj babilejoj. Por ĉi tiu celo, vi ankoraŭ bezonas plibonigi vian anglan antaŭ ĉio. Tial tiuj, kiuj finlegis, ricevos specialan premion: du senpagajn lecionojn en Skyeng kun la unua pago per la kodo. HABR2.

fonto: www.habr.com

Aldoni komenton