EB906629

Page 1


Programujeme STM32 bez knihoven

Ing. Vojtěch Skřivánek

TIM2->ARR = 499U;

TIM2->CR2 |= TIM_CR2_MMS_1;

TIM2-

DMA1_Channel5

DMA1_Channel5

DMA1_Channel5

DMA1_Channel5

RCC->IOPENR |= RCC_IOPENR_IOPAEN;

GPIOA

GPIOA

RCC->APB1ENR |=RCC_APB1ENR_USART2EN; USART2 USART2 USART2

Za podpory firem

SIEM

Programujeme STM32 bez knihoven

Ing. Vojtěch Skřivánek

Vydání první 2022

© Ing. Vojtěch Skřivánek

© Mgr. Tomáš Zahradníček - TZ-one

ISBN: 978-80-7539-134-6 (PDF verze)

ISBN: 978-80-7539-135-3 (ePub verze)

ISBN: 978-80-7539-136-0 (mobi verze)

Poděkování

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].

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.