Děkujifirmám SIEMENS
zapodporupřipsanítétoknihy.
4.1.1.1Nalezenísymbolickéhonázvuregistru
4.1.1.2Nalezenísymbolickéhonázvubitu
5.1TlačítkemrozsvícenáLEDpomocípřerušení
5.1.2Funkceperiferií
5.1.2.1LED-přepínání
5.1.3Obsluhapřerušení
5.1.4Tvorbahlavníhoprogramu
5.1.5Zapojení
5.1.6Porovnání
6.1.1Nastaveníperiferií
6.1.1.1RCC-hodinovýsignál
6.1.1.2TIM
6.1.2Funkceperiferií
6.1.2.1TIM-start
6.1.3Obsluhapřerušení
6.1.4Tvorbaprogramu
6.1.5Porovnání
6.2BlikánípomocíOCrežimu .......................................
6.2.1Nastaveníperiferií
6.2.1.1TIM
6.2.2Tvorbaprogramu
6.2.3Provnání
6.3BlikánísnastavenímdélkypomocíICrežimu
6.3.1Nastaveníperiferií
6.3.1.1TIM3
6.3.2Funkceperiferií
6.3.2.1TIM3start
6.3.3Obsluhapřerušení
6.3.4Tvorbaprogramu
6.3.5Zapojení
6.3.6Rozborprogramu
6.3.7Porovnání
6.4NastaveníjasuLEDpomocíPWMrežimu
6.4.1Nastaveníperiferií
6.4.2Funkceperiferií
6.4.2.1TIM2-změnastřídy
6.4.3Tvorbaprogramu
6.4.4Rozborprogramu
6.5Časovačspuštěnýčítačemvnějšíchudálostí
6.5.1Nastaveníperiferií
6.5.1.1TIM2
6.5.1.2TIM21
6.5.2Funkceperiferií
6.5.2.1TIM21-start
6.5.3Tvorbaprogramu
7UART
7.1LEDrozsvícenápovelemzpočítače ..................................
7.1.1Převodníksériovékomunikace
7.1.2Nastaveníperiferií
7.1.2.1UART
7.1.3Funkceperiferií
7.1.3.1UART-odesílánídat
7.1.3.2UART-příjemdat
7.1.3.3UART-callbackpřijmu
7.1.4Obsluhapřerušení .......................................
7.1.5Tvorbaprogramu
7.1.6Porovnání
8.1Přerušovanéměřenídvoukanálů
8.1.1Nastaveníperiferií .......................................61
8.1.1.1ADC
8.1.1.2UART
8.1.2Funkceperiferií
8.1.2.1ADC-start
8.1.2.2UART–odešlidatavblokujícímrežimu
8.1.3Obsluhapřerušení
8.1.4Tvorbaprogramu ........................................65
8.1.5Zapojení
8.1.6Porovnání
8.2Jednotlivéměřenídvoukanálůsexternímspouštěním
8.2.1Nastaveníperiferií
8.2.1.1ADC
8.2.1.2EXTI
8.2.2Obsluhapřerušení
8.2.3Tvorbaprogramu
8.2.4Zapojení
8.2.5Porovnání
9DAC
9.19.1NastaveníjasuLEDpomocíDAC
9.1.1Nastaveníperiferií
9.1.1.1DAC
9.1.2Funkceperiferií
9.1.2.1DAC-nastavenívýstupníhodnoty
9.1.3Tvorbaprogramu
9.1.4Porovnání
10.1ObousměrnáSPIkomunikaceMaster<->Slave
10.1.1.1SPI1
10.1.1.2SPI2
10.1.2Funkceperiferií
10.1.2.1SPI1–vysílaníapříjemvblokujícímrežimu
10.1.2.2SPI2–vysílaníapříjemvneblokujícímrežimu
10.1.3Obsluhapřerušení
10.1.4Tvorbaprogramu
10.1.5Zapojení
10.1.6Rozborprogramu
10.1.7Porovnání
11.1JednosměrnákomunikaceMaster->SlaveaMaster<-Slave
11.1.1Nastaveníperiferií
11.1.1.1I2C1
11.1.1.2I2C3
11.1.2Funkceperiferií
11.1.2.1I2C1-vysílání
11.1.2.2I2C1-příjem
11.1.2.3I2C3-vysílání
11.1.2.4I2C3-příjem
11.1.3Obsluhapřerušení
11.1.3.1I2C1
11.1.3.2I2C3
11.1.4Tvorbaprogramu
11.1.5Zapojení
11.1.6Rozborprogramu
11.1.7Porovnání
12DMA
12.1DMApřenoszpamětidopaměti
12.1.1Nastaveníperiferií
12.1.1.1DMA
12.1.2Funkceperiferií
12.1.2.1DMA-start
12.1.3Obsluhapřerušení
12.1.4Tvorbaprogramu
12.1.5Rozborprogramu
12.1.6Porovnání
12.2DMApřenoszperiferiedopamětianaopak
12.2.1Nastaveníperiferií .......................................105
12.2.1.1UART
12.2.1.2DMA5
12.2.1.3DAC
12.2.1.4DMA4
12.2.1.5TIM
12.2.2Funkceperiferií
12.2.2.1DMA5-start
12.2.2.2DMA4-start
12.2.2.3TIM-start
12.2.3Tvorbaprogramu
12.2.4Porovnání
12.3DMApřenoszperiferiedoperiferie
12.3.1Nastaveníperiferií
12.3.1.1ADC
12.3.1.2DMA1
12.3.2Tvorbaprogramu
12.3.3Zapojení
12.3.4Porovnání
Kapitola1
Úvod
Tatoknihanavazujenaknihu„ProgramujemeSTM32–zdolejtejednočipyprofesionálů“.Proto,pokud ještěnemátezkušenostiskontrolerySTM32,doporučujinejprvepřečísttu.
StejnějakopředchozíknihaseitatozabývádevítinejrozšířenějšímiperiferiemimikrokontrolerůSTM32. Rozdíljevšakvpřístupuktěmtoperiferiím.
Knihasejižnevěnujetomu,jakperiferiefungují,anijakpoužívatstandardníknihovny.Jespíšesbírkou příkladů,kteréukazují,jakperiferievyužívatbezpoužitíknihoven.Pracípřímosregistryjednotlivýchperiferií poskytnečtenářipovědomíotom,jakéregistryajakánastaveníjsouprodanouperiferiikontroleruSTM32 typickými.VšechnykontrolerySTM32majítotižjednotnénázvoslovíiúčelregistrů(kontrolní,konfigurační, stavový,datový...).Ztohodůvodubudesnadnézorientovatseipřiprácisjinýmkontrolerem.
Použitíknihovenčastoskryje,covšechnojenutnévperiferiinastavit,abyplnilasvůjúčel.Dvojnásobně toplatíuspoluprácedvouperiferií.Tím,žepříkladyvtétoknizenepoužívajíknihovny,proniknemehlouběji dofunkcemikrokontroleru.Uvědomímesiivěci,kterésenaprvnípohlednemusízdátzcelazřejmé.
Předpokládáse,žečtenářumízacházetsvývojovýmprostředímSTM32CubeIDEaví,jaknahrátaladitprogramkontroleru.Dalšímnutnýmpředpoklademjeobecnáteoretickáznalostfunkcevšechperiferiía komunikačníchprotokolů,sekterýmitatoknihapracuje.
1.1Motivaceknihy
Jakýjevlastnědůvodnepoužívatoficiálníknihovnykovládáníperiferiímikrokontroleru?Jakýmásmysl psátsivlastníknihovnífunkce?Nenítozbytečnápráceskýtajícírizikovytvořeníchyby?
Hlavnímidůvody,pročnevyužítknihovnyanapsatsivlastníkód,jsou:
• Velikostprogramu:
Knihovnífunkcejsounavrženytak,abybylyuniverzální.Aťužchcemenastavitnebopoužítperiferii jakýmkolivzpůsobem,knihovnífunkcesistímporadí.Tatouniverzálnostjebohuželvykoupenavelkým množstvímkódu,kterýsevpraxivůbecnevyužije,jelikožvždychcemedanouperiferiivyužítpouzev jednomkonkrétnímrežimu.
• Rychlostprogramu:
Tentobodsouvisíspředchozím.Jelikožjsouknihovnífunkceuniverzální,obsahujívelkémnožstvípodmínekavětvení.Pokudpřesněvíme,jakperiferiipoužít,jemožnévytvořitfunkcesminimempodmínek, kteréprogramzpomalují.
• Testovatelnostprogramu:
Pokudpracujemenaprogramuproduktu,kterýmusífungovatbezpečně,mělabybýtkaždáfunkcionalita, každávětev,ideálněkaždýřádekkóduotestován.Otestovatknihovnífunkcijevelmipracnéapředevším zbytečné,pokudvyužívámepouzejejíčást.Navícbyprogram,kterýmázískatbezpečnostnícertifikaci, nemělobsahovatnevyužitý(mrtvý)kód.Knihovnífunkcejsoutakovéhokóduplné.
Dalšímargumentemmůženapříkladto,ženevždyknihovnífunkcenabízívšechnymožnostivyužitíperiferie.
Nadruhoustranubymělybýtzmíněnyivýhodypoužitíknihoven:
• Knihovnífunkceneobsahujíchyby(většinou):
Oficiálníknihovnífunkcejsouotestované.Neopomíjejížádnénastaveníperiferie,kterémůžeprogramátor připsanívlastníchknihovenvynechat,aprogramsemůževneočekávanýchpodmínkáchchovatnestandardně.POZOR!Unovýchrodinčipůjemožné,žeioficiálníknihovnyobsahujídoposudneodhalenou chybu(předevšímufunkcímálopoužívanýchperiferiínebojejichrežimů)
• Knihovnífunkcejsoupřenositelné:
Tatovýhodaneplatívždy,aleskutečnějemožné,ževelkoučástsvéhoprogramumůžetepoužítiv případě,žeserozhodnetejejspustitnajiném,podobnémkontroleru.Některéknihovnífunkcemají velmičastostejnýtvaripoužitíuvícerodinkontrolerů.
• Knihovnífunkcenevyžadujídetailníznalostkontroleru:
Zřejměnejvětšívýhodoupoužitíknihovníchfunkcíjeto,ženenípotřebaznát,jakkontrolerfunguje.Jaké registryjepotřebanastavit,abyperiferiedělalatočiono,nenínašestarost.Pokudchcemenapříklad přijmoutdatapomocídigitálníkomunikace,použijemeknihovnífunkciatatoprovede,anižbychom muselivědět,jakéoperacejeprotonutnéudělat.Ajepravdou,ženěkterékontrolerysevpoužití některýchperiferiíznačněliší.
Nynínechmevšechnynevýhodyknihovenstranou.Předevšímspřihlédnutímkposlednímuboduvýhod knihovenmůževyvstatotázka:Pročseučitdodetailu,jaknastavitavyužívatperiferietohotokontroleru, kdyžujinéhomohoufungovatodlišně?
Ano,jepravdažejinýkontrolerSTM32nebudefungovatstejně.KontrolerSTM32L073RZjealejednímz nejjednoduššíchkontrolerů.Můžemetedyočekávat,žeto,cojenutnénastavituněj,budepotřebaudělatiu komplexnějšíchrodin,jelikožzákladnínastaveníbýváshodné.
Ukontrolerůzvyššíchřadjsouvětšímožnostinastaveníasofistikovanějšíchováníperiferií.Tovpraxi siceznamenájejichnáročnějšíinicializaci,alepotéjejichpohodlnějšíobsluhu.Navícto,žeperiferienabízí pokročilejší,víceautomatizovanérežimy(napříkladbufferovánípřijmudatdigitálníkomunikace)neznamená, žejemusímepoužívat.Velmičastojemožnéipokročilejšíperiferiekomplexnějšíchkontrolerůpoužívatv základnímrežimu.
1.2Strukturaknihy
Každázdevítikapitolsezabývájednouperiferií.Obsahujejedennebovícepříkladůkódujejíhovyužití.Příkladyvtétoknizevěrněkopírujíukázkyzpředchozí„ProgramujemeSTM32–zdolejtejednočipy profesionálů“.Nakoncikaždéhopříkladutytokódyporovnámezrůznýchhledisek.
Oprotipředchozíknizenenítatoknihaučebnicí,takžeobsahujeopoznáníménětextu.Avšakotovíceje vníkódu,kterýjetextemokomentovaný.
Nazačátkukaždéhopříkladujejehozadání.Poněmnásledujetvorbaapopiskódu,kterýzadánísplní. Kódsenejčastějiskládáznásledujícíchčástí:
• Nastaveníperiferií,
• funkceperiferií,
• obsluhapřerušeníperiferiía
• tvorbaprogramu.
Vněkterýchpříkladechjsoujistéčástivynechány,vjinýchjsoučástinavíc.
Důležitéjeupozornit,žekódněkterýchfunkcionalitneukazuje,jakdanouproblematikuřešitnejlépe,ale comožnánejjednodušeji.Účelemjesnadnépochopenífunkceperiferiíaprogramu.Stejnětakjsouvšechny funkcevprogramuurčenépouzeprojedenúčelajednukonkrétníperiferii.
Errataaprojektypříkladůztétoknihyjemožnénajítna www.programujemekontrolery.cz.
Vzávěruvětšinypříkladůjeporovnáníkóduzapoužitíknihovenabeznich.Nejčastějisejednáoporovnání velikostiarychlostikódu.Rychlostjeporovnánaměřenímdélkypulzuvýstupníhopinu,kterýohraničujeměřenoučástkódu.Připorovnávánírychlostijesamozřejměnastavenástejnáfrekvencesystémovéhohodinového signálu.Velikostkódujeporovnánanazákladěvýstupníchinformacípřekladače.Můžemesijizobrazitvokně BuildAnalyzer
Pojehootevřenísenámzobrazíoknosinformacemiovelikostipřeloženéhoprogramu.
Porovnáníbudeuvedenoprotřirůznánastaveníoptimalizacepřekladukódu.Prvníporovnáníbudeuvedeno propřekladbezoptimalizace(-O0 ),druhéprooptimalizacisohledemnanejmenšívelikostkódu(-Os)atřetí přioptimalizacisezaměřenímnanejrychlejšíprogram(-Ofast).
Způsoboptimalizacelzezměnitvnastavenípřekladačeprojektu.
Zapoznámkustojí,žepřitvorběprogramuprobezpečnézařízenínebývápovolenovyužívatjakékoliv optimalizace.
1.3Fontytextu
Anglickézkratky,názvynabídekapolíčekvývojovéhoprostředíanázvyregistrůjsouvždynapsánytučnou kurzívou-např. AutoReload registr.Ačbybylokonzistentnějšípoužívatvknizebuďpouzečeské,nebopouze anglickénázvosloví,existuje-ličeskýekvivalent(např.názvuregistru),jepoužitten,jelikožlépezapadnedo věty,kterájepaksrozumitelnější.Odkazynapoužitézdrojejsouuvedenyčíslemvhranatýchzávorkách–např.[1].
Odkazynapoužitézdrojejsouuvedenyčíslemvhranatýchzávorkách–např.[1].