• Stm32 vyberte ladicí desku. STM32F3DISCOVERY: kompas na vývojové desce od STMicroelectronics. Vytvoření obrazu na LCD

    Jsem další absolvent jedné moskevské univerzity (nebudu specifikovat kterou, ale je průměrná). Před půl rokem jsme byli informováni, že je čas napsat diplomku. V té době jsem právě začínal ovládat mikrokontroléry a nebylo to pro mě snadné, ale s tím vrzáním, které vydává lednička, když se s ní sám snažíte opatrně přemístit, aniž byste poškodili drahocenný laminát (v mém případě linoleum).

    Moje školení začalo, když jsem se před dvěma lety začal zajímat o téma mikrokontrolérů a inženýr, kterého jsem se na ně zeptal, mi dal desku 300x200mm a řekl, že obsahuje řadič STM32F217ZGT6 a tato deska má vše potřebné pro školení. „Obecně platí, že jakmile to zvládnete, všechno ostatní se vám bude zdát jako smetí“ (neřekl však, že pro blikání LED musíte nakonfigurovat SPI, o kterém jsem v té době ani neslyšel). Po třech nepříliš intenzivních měsících bezvýsledných pokusů, vědomí slabosti programátorských dovedností a obrovském množství přečtených článků jsem se musel pro STM32VLDISCOVERY stejně vykouknout a kopírováním programů a experimentováním s nimi se to konečně rozjelo, ale stále pomalu .

    Za rok a půl se mi podařilo pracovat jako vývojář, hledal jsem volná místa, kde pracovali s STM32 (protože si myslím, že jsou to nyní nejperspektivnější mikrokontroléry své třídy), získávali zkušenosti a když došlo na získání diplomu, Vzpomněl jsem si na své bolavé mozoly. Nápad na téma přišel okamžitě: "Hodnotící tabule pro STM32 a (úplný) školicí kurz (pro nejmenší) k tomu."

    Právě proto jsem chtěl napsat úplný a kompletní kurz, aby ostatní takříkajíc netrpěli a přišli na to sami. Když jsem tedy přišel do ústavu a uvědomil jsem si, že k rychlému zvládnutí a pochopení potřebuji pobídku (nebo spíše pořádný kopanec), začal jsem se kopat patou do hrudi (kopal jsem si vlastní hrob), že by nejen napsal školicí kurz (na naší univerzitě jsem musel nazvat jeho metodickou příručku), ale poskytnu i pracovní layout. Téma bylo přijato, zadání bylo napsáno (vykopat hrob, objednat náhrobek), zbývalo vše napsat a navrhnout (lehnout si do hrobu, zakopat a postavit náhrobek).

    Život ukázal, že jsem měl necelých šest měsíců času, ale přesto všechen čas určený na diplomku je téměř u konce, obhajoba je velmi brzy, ale překvapivě je vše nejen připraveno, ale také téměř 100% otestováno (na živých lidech včetně).

    Výstup byl následující:

    1. Samotný kurz (metodická příručka vědeckým způsobem)

    Stručně o něm můžeme říci, že podle mého názoru a podle recenzí testerů je kompletní, ale trochu drsný a nedodělaný. Vzhledem k tomu, že jsem se rozhodl, že nebudu psát učebnici programování SI, tak v kurzu nejsou žádné vysvětlení operátorů, proto řekli, že kurz je místy drsný. Ohledně nedokonalostí, budu upřímný, nestihl jsem vše odladit k doručení, abych o tom mohl psát nejen zde, ale i do metodického návodu k doručení. Taky si myslím, že to může být lepší, ale o tom trochu později.

    2. Odlaďte desku na řadiči STM32F103RET6

    Zde je vše o trochu lepší než v prvním bodě, deska byla navržena, objednána (vzhledem k okolnostem jsem musel urgentně) v Rezonitu, součástky byly objednány, pájeny ručně (upřímně řečeno, žádné video to nepřenese pocit prvního pájení LQFP64) a testováno (většina z toho fungovala okamžitě). Ale to je maketa a samozřejmě se to neobešlo bez překryvů: elektroinstalace, adaptérů a dalších různých „berliček“, ale bohužel druhou revizi nestihnu objednat a asi bych ani ne. , na obhajobu diplomky to určitě bude stačit. Níže tedy budu mluvit podrobněji o této vývojové desce.

    Když jsem nastoupil do své první práce vývojáře elektroniky, narazil jsem na zajímavý názor a jak se ukazuje, je docela běžný. Tento názor zněl asi takto: "Tady jsem programátor a programuji mikrokontroléry, neznám návrh obvodů a nechci to vědět, mimochodem, neumím ani pájet." Po rozhovoru se skupinou programátorů mimo společnost jsem si uvědomil, že člověk z mé práce není ve svém názoru zdaleka sám, a i když to nepodporuji, stojí za to pochopit a respektovat názory ostatních, zejména proto, že se to hodí dokonale do tehdejšího konceptu vývojové desky „all on board“. V tomto ohledu se deska ukázala jako poměrně „tlustá“ a dostala název STM32SB (SB-StudyBoard) V1.0b. Níže se podíváme na to, co je v něm obsaženo.

    1. Mikrokontrolér
    Na základě toho, že jsem pracoval s mikrokontrolérem STM32F103RET6, byl vybrán pro projekt.

    2. Napájecí obvod a hardwarový USB řadič
    Tento mikrokontrolér má vestavěné USB, které bylo rozhodnuto vyvést na samostatný konektor.

    3. Mluvčí
    Bylo rozhodnuto zavést PWM modulaci pro mastering a učení se, jak psát melodie.

    4. Digitální indikátor a posuvný rezistor
    Aby bylo možné současně zvládnout dynamický displej a posuvný registr, bylo rozhodnuto je zkombinovat.

    5. LED diody
    LEDky, co by mohlo být lepší? Pouze tříbarevné LED diody, na kterých si osvojíte plynulé změny barev.

    6.LCD displej
    Standardní LCD displej se 2 řádky po 16 znacích pro zvládnutí paralelního rozhraní.

    7. Klávesnice
    Matrix klávesnice, to musíte znát a umět.

    8. Expandér I/O portů
    Neexistuje nic jako příliš mnoho I/O portů, ale i zde můžete ovládat I2C.

    9. Elektronický teploměr
    1-Wire teplotní senzor je užitečná věc a cenné zkušenosti s prací s ním se mohou hodit.

    10. Elektronický potenciometr
    S touto maličkostí si můžete osvojit plnohodnotné SPI a zkusit měřit změny napětí přes ADC.

    11. Štafeta
    I když je to na úrovni blikání LED, je stále příjemné slyšet známé cvaknutí, že?

    12. Klíčové tranzistory
    Také na úrovni blikání LED, ale najednou někdo nechápe princip.

    13. Duplikace volných pinů na externí piny
    Inu, to je přirozený design pro každou debugovací desku, najednou všechno, co v ní je, je k ničemu, ale stejně je potřeba připojit něco vlastního.

    14. Převodník WIFI-UART (esp8266)
    Převodník je součástí obvodu jako konektor, je zde také naznačen. Je použit již docela senzační modul esp8266.

    15. Převodník USB-UART
    USB je vždy v pohodě, používá čip CP2102.

    16. JTAG a SWD
    No, kde bychom byli bez těchto věcí?

    Tak široká škála externích zařízení umožní zvládnout většinu technik a pokusit se pracovat s většinou rozhraní, aniž byste se obtěžovali s nákupem prvků a aniž byste opustili stůl, což je v souladu s konceptem nejen „vše na palubě“. “, ale i „pro nejmenší“ (kteří neumí pájet).

    Samozřejmě se vyskytly nějaké škytavky, ale jak říká jeden přítel inženýr, „dovednost inženýra se měří v počtu stop uříznutých při první iteraci desky.

    Zde je seznam mých "jambů", čeho jsem si při vývoji této desky nevšiml, zapomněl nebo dokonce nevěděl:

    1. Uvědomil jsem si, že piny SWD jsou umístěny v podivném pořadí a alespoň to neruší činnost desky. Slyšel jsem, podle mého názoru, správný názor, že by měly být umístěny tak, jak jsou umístěny na STM32VLDISCOVERY, aby nedošlo k nedorozumění pro nového uživatele.

    2. Jednobarevné LEDky jako na této desce se nevyplatí zapojovat, protože pro jejich blikání je potřeba přemapovat JTAG, ale výsledkem byl pro mě nečekaný efekt indikující proces načítání firmwaru.

    3. Pro tuto desku jsem vyvinul vlastní logo, které jsem chtěl přenést na PCB a umístit na desku, ale zapomněl jsem.

    4. Pro úsporu místa při druhé revizi desky bych na spodní stranu desky umístil některé uživatelem nepoužívané SMD součástky.

    5. Uvědomil jsem si, že pro pohodlnější zapojení obvodů s křemennými rezonátory by bylo vhodné je nahradit SMD.

    6. Zapomněl jsem se podepsat, kde jsou JTAG a SWD, také neukazují, jak je zapojit, a pokud pro JTAG a jeho konektor BH-20 není vše tak složité, pak u SWD je situace poněkud nebezpečnější.

    7. Při vytváření půdorysu LCD displeje došlo k incidentu a otvory se ukázaly být příliš malé pro šrouby M3.

    8. Převodník CP2102 má zaměněné piny RX a TX. Protože jsem zvyklý na to, že dokumentace uvádí příklad připojení ve vztahu k mikrokontroléru a ne k externímu zařízení, musel jsem oříznout 2 stopy.

    9. Na této desce není vzdálenost mezi hřebínky standardizována v palcích, proto je problém s připojením k nepájivému prkénku zasunutím do něj.

    10. V obvodu indikace aktivace relé došlo k překrytí proudovými omezovacími odpory, hodnota se ukázala být příliš vysoká pro sepnutí relé.

    11. Jako obvykle „dobrá myšlenka přijde později“. Po obdržení desky jsem si tedy uvědomil, že stojí za to udělat jí velikost vhodnou alespoň pro nějaký případ - zřejmě bude muset být upravena ve druhé revizi.

    12. Zpočátku byl navržen malý digitální indikátor, protože nezabíral velkou plochu a byl k dispozici v obchodech, ale ukázalo se, že ve skutečnosti je k dispozici všude při objednávce od 520 kusů, takže jsme museli vyřezat adaptér pro standardní digitální indikátor.

    Nakonec vám ukážu 3D model této desky:

    A pro srovnání fotografie, jak to dopadlo „naživo“, pohled shora:

    A boční pohled, aby bylo vidět více „berliček“:

    Promiňte, ale nechtěl bych zveřejňovat celý projekt před složením diplomky, ale po této práci jsem měl otázku: stojí za to tento projekt rozvíjet? Napadl mě nápad napsat sérii článků věnovaných školení, kde by byl prezentován takový plnohodnotný kurz na této ladicí desce, kde je vše napsáno jednoduchými slovy a v klidu vysvětleno. Rád bych od vás v komentářích slyšel, jak užitečné a potřebné by to v současné době bylo.

    Děkuji za pozornost!

    ST rozdává levné vývojové desky, aby se seznámil s jejich mikrokontroléry. Určitě s nimi začnete i vy - podívám se tedy na hlavní desky Discovery, abyste si mohli vybrat podle svého.

    STM32VLDobjev

    Úplně první deska rodiny se dříve jmenovala jednoduše STM32Discovery. Právě s ní ST zahájil expanzi na trh levných a výkonných univerzálních mikrokontrolérů, to vysvětluje jeho neslušně nízkou cenu - dumpingové ceny této desky přinesly ST zisk v podobě mnoha nových přívrženců.

    Plnicí

    • Debugger - ST-Link, konektor SWD směrem ven
    • Procesor - STM32F100RBT6 (24 MHz, 128 kB flash, 48 kB RAM)
    • 2 tlačítka - uživatelské a reset
    • 2 LED diody
    • vyměnitelné (!) hodiny quartz
    • hodinky quartz
    • 62 pinů na pin stripu, z toho 51 I/O pinů
    • jumper pro určení aktuální spotřeby

    Jak vidíte, je to docela výkonná deska. Ve spojení s nízkou cenou (a mnozí, jako já, ji na seminářích dostávali zdarma) to vyvolalo opravdovou senzaci.

    Deska je dodávána s mnoha příklady použití různých periferií a dobrým „hlavním projektem“, který ve výchozím nastavení bliká.

    Stáhněte si příklady pro STM32VLDiscovery.

    STM32F4Discovery

    Velmi silná deska, jak výkonem procesoru, tak množstvím periferní výbavy. Procesor třídy STM32F4 má vysokou provozní rychlost, mnoho periferií jako jsou paměťové/displejové/kamerové řadiče a všemožná USB, CAN a další rozhraní a také plnohodnotné FPU a DSP moduly. Nádherný procesor, vyrábí se na něm docela dost mých zařízení.

    Plnicí

    • Procesor - STM32F407VGT6 (168 MHz, 1 MB flash, 192 kB RAM)
    • 2 tlačítka - uživatelské a reset
    • 4 LED diody
    • vyměnitelný hodinový krystal
    • 100 pinů na hřeben, z toho 80 I/O pinů
    • propojka pro měření proudu
    • MEMS akcelerometr LIS302DL
    • Digitální mikrofon MP45DT02
    • Audio ADC CS43L22 se zesilovačem třídy D
    • micro USB konektor

    Samozřejmě to stojí více, ale má také mnohem více možností. Výborná deska, pohodlná a výkonná. Používal jsem ho hlavně k provádění experimentů se zvukem, sběrnicemi CAN a USB a akcelerometrem. Přítomnost jádra DSP umožňuje digitálně zpracovávat audio signály a navigaci. Kromě uvedených periferií obsahuje čip také moduly pro výpočet CRC (kontrolní součty), HASH (haš dat), CRYPT (kryptografie) a RNG (generátor náhodných čísel).

    Rozsáhlý je i seznam přiložených příkladů. Jedinou nevýhodou je, že micro-USB není příliš pohodlné.

    Stáhněte si příklady pro STM32F4Discovery.

    STM32F3Discovery

    Stejně dobrá deska, ale s ještě novějším procesorem řady STM32F3 a jasným zaměřením na navigační aplikace a Sensor Fusion. Vypadá to, že byl vyroben na základě vzrůstající obliby kvadrokoptér, které právě takovou sadu polohových senzorů potřebují. Zdá se také, že inženýři vyslyšeli požadavky vývojářů a vyrobili USB ve formě běžného mini-USB.

    Plnicí

    • Debugger - ST-Link/V2 s rozšířeným SWD konektorem
    • Procesor - STM32F303VCT6 (72 MHz, 256 kB flash, 48 kB RAM)
    • 2 tlačítka - uživatelské a reset
    • 8 LED diod
    • 100 pinů na hřeben, z toho 86 I/O pinů
    • propojka pro měření proudu
    • MEMS akcelerometr/magnetometr LSM303DLHC
    • MEMS gyroskop L3GD20
    • mini-USB konektor

    Ve výchozím nastavení je nainstalován poměrně zajímavý příklad - magnetický kompas, který zobrazuje směr sever na LED kruhu.

    Ke schopnostem procesoru stojí za to přidat jednocyklové násobení a dělení železa, moduly pro výpočet CRC (kontrolní součty), HASH (haš dat), CRYPT (kryptografie) a RNG (generátor náhodných čísel) a také pokročilé analogové funkce - 4 operační zesilovače s proměnným koeficientem zesílení, zvýšený počet (4 kusy) 12bitového ADC a 7 komparátorů. Díky tomu je STM32F3 skutečným DSP s vynikajícím analogovým rozhraním.

    Na této desce jsem také vyrobil poměrně dost zařízení.

    Stáhněte si příklady pro STM32F3Discovery.

    STM32F0Discovery

    Nejnovější vývojová deska je založena na juniorském procesoru řady STM32F0.

    Plnicí

    • Debugger - ST-Link/V2 s rozšířeným SWD konektorem
    • Procesor - STM32F051R8T6 (48MHz, 64kB flash, 8kB RAM)
    • 2 tlačítka - uživatelské a reset
    • 2 LED diody
    • 66 pinů na hřebenu, z toho 55 I/O pinů
    • propojka pro měření proudu

    Tato deska je zajímavá především nízkou cenou a použitím procesoru z low-endové rodiny. Vždyť i ten nejslabší ST/ARM procesor je stále mnohonásobně výkonnější než běžný AVR a PIC a stojí ještě méně. Navíc jsou zde CRC moduly, analogové komparátory a dotykový ovladač.

    Stáhněte si příklady pro STM32F0Discovery.

    Zobrazení příspěvku: 118


    Po mnoho let radioamatéři používají osmibitové mikrokontroléry rodiny PIC a AVR. Jsou oblíbené díky nízké ceně, podrobné dokumentaci, snadnému programování a snadné instalaci. Poměrně často však existují případy, kdy výkon takového mikrokontroléru nestačí k vyřešení úkolu. Nejjednodušším příkladem je měřič frekvence nebo generátor signálu na mikrokontroléru, kde maximální naměřená nebo generovaná frekvence přímo závisí na rychlosti zpracování nebo výstupu informace.

    Kromě rychlosti mají osmibitové mikrokontroléry i další omezení, například řada modelů AVR má pouze jeden hardwarový sériový port, který neumožňuje přijímat informace z externího zařízení a současně odesílat výsledky jejich zpracování spotřebiteli. Nemluvě o tak „banálních“ věcech, jako je zobrazování informací na grafickém ukazateli, které vyžaduje velké prostředky jak rychlosti, tak paměti. Po analýze řady takových omezení přišel autor s myšlenkou přejít na mikrokontroléry rodiny STM32.

    Uvažujme například dva mikrokontroléry stejné cenové kategorie – STM32F103C6 a ATmega328P.

    stůl 1

    Typ mikrokontroléru

    Velikost procesoru

    Rozteč olova, mm

    Hodinová frekvence, MHz

    Objem paměti FLASH. KB

    Množství paměti RAM, kB

    Číslo USART

    Počet 16bitových časovačů

    Počet I/O linek

    Přibližná cena, rub.

    Jejich srovnávací parametry jsou uvedeny v tabulce. 1. Výsledky srovnání jsou dokonce poněkud překvapivé. 32bitový mikrokontrolér je nejen výkonnější než osmibitový mikrokontrolér téměř ve všech ohledech, ale je také levnější. Připájet doma mikrokontrolér s roztečí pinů 0,5 mm samozřejmě není tak jednoduché. Naštěstí to ve většině případů není vyžadováno – na trhu je mnoho typů vývojových desek s mikrokontroléry rodiny STM32, dostačujících pro různé aplikace. Pojďme se na ně podívat podrobněji.

    STM32F4-DISCOVERY

    Tato deska (zobrazená na obr. 1) je možná nejvýhodnější pro začátečníky studující mikrokontroléry STM. Za prvé, má velkou sadu periferií. Kromě mikrokontroléru deska obsahuje mikroelektromechanický akcelerometr, mikrofon, audio DAC, dva USB konektory, tlačítko a čtyři LED diody.

    Piny mikrokontroléru jsou vyvedeny na kontaktní plošky pro montáž kolíkových konektorů na levém a pravém okraji desky, což usnadňuje připojení všech nezbytných externích zařízení k nim. Mikrokontrolér STM32F407VGT6 osazený na desce má velmi dobré parametry: 1 MB FLASH paměti, 192 KB RAM a taktovací frekvenci 168 MHz.

    Nakonec je deska vybavena vestavěným debuggerem ST-LINK/V2, kterým lze ladit programy nejen na mikrokontroléru na desce, ale i na mikrokontrolérech stejné rodiny umístěných na jiných deskách. Přepínání na ně se provádí pomocí odnímatelného jumperu a SWD konektoru.

    Cena desky je asi 800 rublů, což lze považovat za docela přijatelné.

    Vývojová deska STM32F103RBT6

    Další zajímavou možností je vývojová deska s mikrokontrolérem STM32F103RBT6 (obr. 2).

    Je sice o něco slabší než ten osazený na předchozí desce – taktovací frekvence 72 MHz, 128 KB FLASH paměti a 20 KB RAM, ale periferní zařízení jsou velmi zajímavá. K dispozici je dotykový TFT displej s rozlišením 320x240 bodů a úhlopříčkou 2,8", vestavěný USB port pro výměnu informací s počítačem, slot pro paměťovou SD kartu, 32768 Hz quartz hodiny, přihrádka na baterie hodin reálného času a konektor ST-LINK pro ladění programů.

    Cena této desky je také asi 800 rublů, ale je třeba poznamenat, že nemá vestavěný debugger. Chcete-li stáhnout programy, musíte si buď zakoupit samostatný debugger ST-LINK, nebo místo toho použít desku STM32F4-DISCOVERY popsanou výše.

    Javor Mini

    Vnější podobnost této desky (obr. 3) se známými moduly Arduino je zarážející. A to není náhoda.

    Deska Maple Mini byla navržena jako náhrada za Arduino Nano. Programovací jazyk a vývojové prostředí pro rodinu mikrokontrolérů AVR instalované v Arduinu byly přizpůsobeny rodině STM. Podrobné informace o programovacím jazyce Maple IDE a vývojovém prostředí najdete na http://leaflabs.com/docs/maple-q uickstart.html.

    Vývojová deska má mikrokontrolér STM32F103CBT6 běžící na 72 MHz, 128 KB paměti FLASH a 20 KB RAM, což je nepochybně více než kterýkoli modul Arduino. A ještě větší výhodou je, že vývojové prostředí zůstalo prakticky nezměněno.

    Samostatně poznamenáváme, že i přes svou miniaturní velikost poskytuje Maple Mini velmi rozmanitá periferní zařízení: 34 I/O linek, dva kanály rozhraní SPI a dva I2C, tři sériové porty. To umožňuje jeho úspěšné použití v různých amatérských vývojech. Maple Mini lze díky malým rozměrům zabudovat přímo do vyvíjeného zařízení.

    Originální desku Maple Mini lze zakoupit za 35 dolarů na stránkách jejích vývojářů. Poštovné bude stát dalších 5 dolarů. Kopie desky vyrobené v Číně bude stát polovinu.

    Software

    Existuje několik možností pro vývojová prostředí, která lze použít k přípravě programů pro mikrokontroléry řady STM32:

    Komerční IAR Embedded Workbench, AtollicTrueSTUDIO, Keil atd. Tyto plnohodnotné produkty jsou poměrně drahé, s cenou licence od 1000 eur, ale existují i ​​bezplatné demo verze s omezením objemu vyvíjeného programu; jednoduché projekty jsou docela dost;

    Bezplatný Eclipse s kompilátorem ARM-GCC vyžaduje před použitím netriviální konfiguraci kompilátoru. Jediným plusem pro dnešek je schopnost pracovat nejen ve Windows, ale i v Linuxu;

    Zdarma CooCox IDE (CoIDE) založené na stejném editoru Eclipse. Načítá a ladí programy přes ST-LINK. Na rozdíl od předchozí možnosti CoIDE nevyžaduje žádné speciální nastavení a funguje ihned po instalaci. Tato možnost je nejpohodlnější a vyplatí se ji využít.

    Pomocí CooCox IDE vytvoříme ukázkový program pro desku STM32F4-DISCOVERY, který implementuje klasické LED blikání prvního programu pro libovolný mikrokontrolér. Na desce STM32F4-DIS-COVERY jsou čtyři LED, jsou připojeny na piny PD12-PD15 mikrokontroléru. Necháme je střídavě blikat.

    Krok 1. Spusťte vývojové prostředí CoIDE a vytvořte projekt. Z rozevíracího seznamu zobrazeného na Obr. 4, vyberte mikrokontrolér STM32F407VG.

    Krok 2. Jak je znázorněno na Obr. 5, vyberte komponenty, které budou použity v projektu. Mezi hlavní patří GPIO (input-output), C Library (základní funkce jazyka C) a M4 Core (funkce jádra procesoru). Když komponentu aktivujete, CoIDE automaticky zkopíruje potřebné soubory do složky projektu, což je velmi výhodné.

    Krok 3. Zadání textu programu. Je poměrně krátký a je uveden v tabulce. 2.

    Jak vidíte, vše je jednoduché a zřejmé. Ti, kteří mají napsané programy pro mikrokontroléry AVR, se pravděpodobně dočkají známých návrhů - inicializace portů udávajících směr (vstup nebo výstup), hlavní smyčka, ve které se provádějí potřebné akce. Obecně syntaxe programu plně odpovídá jazyku C, ke kterému je literatury více než dost. Na internetu je také spousta článků o programování pro STM32. Mnoho příkladů je dodáváno s vývojovou deskou a lze je také použít jako vzorky.

    Po zadání textu programu kliknutím na tlačítko obrazovky "Download to flash" se program stáhne do mikrokontroléru. LED na desce začnou blikat. Samostatně stojí za zmínku možnosti ladění - bod přerušení lze nastavit kdekoli v programu, program můžete spustit krok za krokem a prohlížet hodnoty proměnných.

    Tento příklad samozřejmě není ideální. Můžete například použít přerušení časovače pro ovládání blikání LED, což uvolní hlavní smyčku programu pro další úkoly. Kdo chce, může na to přijít sám.

    Závěr

    Obecně po prvním seznámení zanechaly mikrokontroléry rodiny STM32 velmi příjemný dojem. Ukázalo se, že vše není tak složité a pohodlí vývojového prostředí, proces ladění a velké množství standardních funkcí dokonce trochu připomnělo přechod z MS DOS na Windows - obecné body se zdají být stejné, ale vše je mnohem pohodlnější a funkčnější.

    Ale hlavní nevýhodou této rodiny pro amatérský vývoj je stále příliš malá rozteč pinů. Navrhnout a připájet doma desku s roztečí pinů 0,5 mm je velmi netriviální úkol. Ale za současné ceny jsou ladicí desky s již namontovanými mikrokontroléry docela dostupné pro každého radioamatéra.

    Vyplatí se vše převést na STM a 32bitovou architekturu? Samozřejmě že ne. Jsou úkoly, na které ATtiny zcela postačí. Ale například pro analýzu spektra v domácím přijímači SDR nebo pro příjem a přenos velkého množství informací po síti je mnohem efektivnější okamžitě použít výkonný mikrokontrolér, abyste nenarazili na nedostatek paměti nebo výkonu, když vylepšení zařízení.

    Obecná informace

    Vývojová deska STM32L-Discovery má displej z tekutých krystalů (LCD) se šesti 14 segmentovými znaky, 4 dvojtečkami (dvojtečka), 4 tečkami (DP), 4 pruhy (čára). Všechny segmenty jsou sloučeny do skupin COM0, COM1, COM2, COM3 po 24 segmentech. Každá skupina má svůj vlastní samostatný „společný vodič“.


    Na ladicí desce je nainstalován mikrokontrolér STM32L152RBT6. Mikrokontrolér má vestavěný LCD ovladač, který ovládá monochromatické LCD indikátory.
    LCD ovladač:

    1. Umožňuje nakonfigurovat frekvenci aktualizace (snímací frekvence - frekvence, se kterou se aktualizují informace na LCD)
    2. Podporuje režim statického a multiplexního ovládání
    3. Podporuje softwarové nastavení kontrastu
    4. Umožňuje více úrovní ovládacího napětí (až čtyři)
    5. Využívá dvojité ukládání do vyrovnávací paměti, což umožňuje aktualizaci dat v registrech LCD_RAM ​​kdykoli během provádění programu bez narušení integrity zobrazovaných informací

    Registry paměti LCD ovladače

    Mikrokontrolér STM32L152RB má speciální registry LCD_RAM, v nichž uložené informace odpovídají skupině segmentů COM0 - COM3. Každá skupina odpovídá dvěma 32bitovým registrům. Tento počet registrů umožňuje mikrokontroléru ovládat LCD s větším počtem segmentů, než jsou ty nainstalované na ladicí desce.

    K ovládání LCD se 176 segmenty se používají 4 skupiny COM0 - COM3 po 44 segmentech, k ovládání LCD se 320 segmenty 8 skupin COM0 - COM7 po 40 segmentech.



    Vývojová deska STM32L-Discovery používá LCD s 96 segmenty, rozdělenými do 4 skupin COM0 - COM3 po 24 segmentech.


    LCD na vývojové desce STM32L-Discovery je zapojeno tak, že jsou použity bity S40, S41 druhých registrů LCD_RAM ​​v každé skupině a bity S0-S27 prvních registrů LCD_RAM. Pro snížení počtu použitých registrů budou informace z bitů S40-S43 zapsány do volných bitů S28-S31 pomocí funkce přemapování.

    Blok frekvenčního děliče

    Blok frekvenčního děliče (Frequency generator) umožňuje dosáhnout na LCD různé snímkové frekvence v rozsahu od 32 kHz do 1 MHz. Jako zdroj časovacího signálu lze použít následující:
    1. Externí nízkofrekvenční generátor s frekvencí 32 kHz (LSE. Low speed externí)
    2. Vnitřní nízkofrekvenční generátor s frekvencí 37 kHz (LSI. Low speed interní)
    3. Externí RF generátor s frekvenčními děliči 2,4,8 a 16 a maximální frekvencí 1 MHz. (HSE. Vysokorychlostní externí)
    Chcete-li dosáhnout přesné synchronizace a snížit odchylku stejnosměrného napětí napříč segmenty LCD, musí být zdroj hodin stabilní. Hodinový signál LCDCLK je odeslán do ovladače LCD. Frekvence hodinového signálu je rozdělena podle dělicích faktorů, které jsou nastaveny bity PS, DIV registru LCD_FCR (Frame Control Register). Výsledná frekvence na výstupu bloku frekvenčního děliče se vypočítá podle vzorce:

    F ck_div =F LCDCLK / (2 PS *(16+DIV))

    Snímková frekvence se vypočítá pomocí vzorce:

    F Rám =f ck_div *povinnost

    Kde clo je pracovní cyklus - poměr trvání impulsu k jeho periodě. Během jednoho snímku se na LCD postupně zobrazují informace z registrů LCD_RAM[x], LCD_RAM ​​atd. U LCD instalovaného na vývojové desce musí v jednom snímku řadič LCD vydávat informace ze 4 skupin segmentů COM0 - COM3, proto bude doba trvání řídicího impulsu pro jednu skupinu 1/4 doby trvání snímku, tzn. clo = 1/4.

    LCD ovládání

    Existují dva způsoby ovládání LCD - režim statického ovládání a režim ovládání multiplexu. Při statické indikaci je každý segment bitu indikátoru připojen k výstupu mikrokontroléru. Ve vztahu k LCD je na ladicí desce STM32LDiscovery vyžadováno 6 * 14 = 84 pinů mikrokontroléru (kromě dvojteček, teček a pruhů). Vzhledem k použití takového počtu pinů bude připojení dalších periferií nemožné. Mikrokontrolér STM32L152RB má 64 pinů. V režimu multiplexního řízení (dynamický režim řízení) se identické segmenty číslic indikátoru spojují do skupin. Informace jsou zobrazovány střídavým osvětlením segmentů číslic indikátoru s frekvencí, která je lidským okem nepostřehnutelná.

    Multiplexní řízení umožňuje ovládat velké množství segmentů. Namísto samostatného ovládání každého prvku mohou být adresovány řádky a sloupci (COM a SEG), čímž se zjednoduší řídicí obvod, protože každý segment nevyžaduje vlastní ovládací vedení. Pro zapnutí vybraného segmentu je třeba na něj aplikovat potenciální rozdíl COM a SEG. Příklad funkce první číslice indikátoru (ukazatel zobrazuje „1:“):


    První číslice indikátoru v čase t 0


    První číslice indikátoru v čase t 1


    První číslice indikátoru v čase t 2


    Obecné schéma připojení segmentů k pinům LCD


    Schéma zapojení pinů LCD k portům mikrokontroléru

    Pro vedení SEG se používá řídicí napětí, jehož počet úrovní je určen koeficientem zkreslení. LCD na vývojové desce používá režim multiplexního řízení s clonou=1/4 a předpětím=1/3. Hodnoty cla a bias se nastavují přes registr LCD_CR (Control Register) v bitech DUTY a BIAS.

    Praxe

    Konfigurace portů mikrokontroléru

    Pro ovládání LCD musí být porty mikrokontroléru nakonfigurovány odpovídajícím způsobem:
    1. K východu
    2. Použití funkce AF 11 Alternativní
    3. Mít výstupní frekvence do portu 400 kHz
    4. Použijte provozní režim push-pull
    5. Žádné pull-up odpory
    Když port pracuje v alternativním funkčním režimu, výstupní datová vyrovnávací paměť portu je řízena signály přicházejícími z periferie. Hlavičkový soubor stm32lxx.h knihovny CMSIS obsahuje popis všech periferních registrů a také strukturu pro přístup k nim.

    Piny LCD jsou připojeny k portům GPIOA (PA1-PA3,PA8-PA10,PA15), GPIOB (PB3-PB5, PB8-PB15), GPIOC (PC0-PC3,PC6-PC11) mikrokontroléru. Aby LCD fungovalo, musí být do vybraných portů přiveden hodinový signál. GPIO porty mikrokontroléru jsou taktovány ze sběrnice AHB systému RCC (Reset and Clock Control) - systém hodin a reset. Hodinový signál je dodáván nastavením odpovídajících bitů v registru RCC_AHBENR (AHB periferní hodiny umožňující registr).

    Zaregistrujte RCC_AHBENR (obrázek ukazuje prvních 15 bitů)

    Pro porty GPIOA, GPIOB, GPIOC je potřeba nastavit 1 až 0, 1, 2 bity registru.

    Dále uvedu kód pro zápis informace do registru pomocí bitové masky a pomocí hexadecimálních kódů. Použití bitových masek je pohodlnější, ale práce s hexadecimálními kódy umožňuje pochopit podstatu práce s registry.

    RCC->AHBENR |=(RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN|RCC_AHBENR_GPIOCEN); nebo RCC->AHBENR = 0x7; /* 0x7=111 */

    Pro indikaci provozních režimů portu se používá registr GPIOx_MODER (registr režimu portu GPIO) (x = A..H). Všechny bity registru jsou seskupeny do skupin MODERY, kde y je číslo pinu odpovídajícího portu. Porty musí být nakonfigurovány pro alternativní funkční režim, tzn. ve skupině odpovědné za pin nastavte hodnotu na 10. Pro port GPIOA je třeba nakonfigurovat piny 1-3,8-10,15, tedy nastavit 1 na 3,5,7,17,19, 21,31 číslic.


    Zaregistrujte GPIOx_MODER (registr režimu portu GPIO)

    GPIOA->MODER |= (GPIO_MODER_MODER1_1 | GPIO_MODER_MODER2_1 | GPIO_MODER_MODER3_1 | GPIO_MODER_MODER8_1 | GPIO_MODER_MODER9_1 | GPIO_MODER_MODER10_1 | GPIO_5MODER_MODER); nebo GPIOA->MODER = 0x802A00A8; /* 0x802A00A8=1000 0000 0010 1010 0000 0000 1010 1000 */
    Porty mikrokontroléru musí být přepnuty do režimu push-pull. K tomu je potřeba nastavit 1 v registru GPIOx_OTYPER (registr typu výstupu GPIO portu) v bitech odpovědných za piny.


    Registrovat GPIOx_OTYPER (registr typu výstupu portu GPIO)

    GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_1 | GPIO_OTYPER_OT_2 | GPIO_OTYPER_OT_3 | GPIO_OTYPER_OT_8 | GPIO_OTYPER_OT_9 | GPIO_OTYPER_OT_10 | GPIO_OTYPER_OT_15); nebo GPIOA->OTYPER &= ~0x0000870E; /* 0x870E=1000 0111 0000 1110 */
    Obě možnosti ovlivňují vybrané piny. (Pro port GPIOA jsou nakonfigurovány piny 1-3.8-10.15). Pokud potřebujete přepnout všechny piny portu do režimu push-pull, můžete do registru zapsat následující hodnotu:
    GPIOA->OTYPER = 0x0;
    Pro specifikaci frekvence výstupu informací na port se používá registr GPIOx_OSPEEDR (registr výstupní rychlosti portu GPIO). Všechny bity registru jsou seskupeny do skupin OSPEEDRy, kde y je číslo pinu odpovídajícího portu. V této práci by měla být frekvence nastavena na 400 kHz tzn. ve skupině odpovědné za pin nastavte hodnotu na 00.


    Registrovat GPIOx_OSPEEDR (registr výstupní rychlosti portu GPIO)

    GPIOA->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR1 | GPIO_OSPEEDER_OSPEEDR2 | GPIO_OSPEEDER_OSPEEDR3 | GPIO_OSPEEDER_OSPEEDR8 | GPIO_OSPEEDER_OSPEEDR9 | GPRIOSPEOSPEEDR9 | 1 GPRIOPSPEOSPEEDR_1 GPRIOPEOSPEEDR nebo GPIOA->OSPEEDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
    Pokud potřebujete nastavit výstupní frekvenci portu na 400 kHz pro všechny piny, můžete zapsat hodnotu do registru:
    GPIOA->OSPEEDR = 0x0;
    Pro deaktivaci pull-up a pull-down rezistorů pro vybrané piny použijte registr GPIOx_PUPDR (GPIO port pullup/pull-down registr). Všechny bity registru jsou seskupeny do skupin PUPDRy, kde y je číslo pinu odpovídajícího portu. Chcete-li zakázat pull-up rezistory ve skupině odpovědné za pin, nastavte hodnotu na 00.


    Zaregistrujte GPIOx_PUPDR (roztahovací/rozbalovací registr GPIO portu)

    GPIOA->PUPDR &= ~(GPIO_PUPDR_PUPDR1 | GPIO_PUPDR_PUPDR2 | GPIO_PUPDR_PUPDR3 | GPIO_PUPDR_PUPDR8 | GPIO_PUPDR_PUPDR9 | GPIO_PUPDR_PUPDR10 | GPOPIO_PUPDR3); nebo GPIOA->PUPDR &= ~0xC03F00FC; /*0xC03F00FC=1100 0000 0011 1111 0000 0000 1111 1100 */
    Pokud potřebujete zakázat pull-up rezistory pro všechny piny, můžete zapsat hodnotu do registru:
    GPIOA->PUPDR = 0x0;
    Chcete-li použít alternativní funkci pro porty mikrokontroléru, dva registry GPIOx_AFRL (nízký registr alternativní funkce GPIO), odpovědné za nízké kolíky (0 až 7) a GPIOx_AFRH (horní registr alternativní funkce GPIO), odpovědné za vysoké kolíky (8 až 15) , Jsou používány. Všechny bity registru jsou seskupeny do skupin AFRLy a AFRHy, kde y je číslo pinu odpovídajícího portu. Porty musí být nakonfigurovány pro použití alternativní funkce AF11, k tomu musí být skupina odpovědná za pin nastavena na 1011.


    Registrovat GPIOx_AFRL (nízký registr alternativní funkce GPIO)


    Registrovat GPIOx_AFRH (horní registr alternativní funkce GPIO)

    Chcete-li to provést, musíte do registrů zapsat následující hodnoty:
    GPIOA->AFR = 0xBBB0; /* 0xBBB0 = 1011 1011 1011 0000*/ GPIOA->AFR = 0xB0000BBB; /* 0xB0000BBB=1011 0000 0000 0000 0000 1011 1011 1011*/

    AFR = 0xBBB0 – zapíše hodnotu do registru GPIOx_AFRL.
    AFR = 0xB0000BBB – zapíše hodnotu do registru GPIOx_AFRH.

    Nastavení pro odpovídající piny portů GPIOB a GPIOC se provádí stejným způsobem.

    Nastavení ovladače LCD

    Při práci s LCD ovladačem, stejně jako s jinými periferiemi, musí být do něj přiváděn hodinový signál. Hodinový signál je rovněž dodáván do systému řízení spotřeby. Řadič a systém řízení spotřeby využívají k taktování sběrnici APB1. Chcete-li povolit taktování v registru RCC_APB1ENR (registr povolení periferních hodin APB1), musíte nastavit 1 v bitech 9 a 28.


    Registrovat RCC_APB1ENR (registr povolení periferních hodin AB1)

    RCC->APB1ENR |= RCC_APB1ENR_PWREN|RCC_APB1ENR_LCDEN; nebo RCC->APB1ENR |= 0x10000200; /* 0x10000200=1 0000 0000 0000 0000 0010 0000 0000 */
    Aby LCD ovladač fungoval, je nutné specifikovat zdroj hodinových signálů. Zdroj je uveden v registru RCC_CSR. Ve výchozím nastavení je zápis do tohoto registru zakázán. Ochrana proti zápisu v registru RCC_CSR je odstraněna v registru řízení výkonu PWR_CR. Registr RCC_CSR řídí zdroje hodin řadiče RTC a LCD
    Zápis do registru RCC_CSR je povolen nastavením bitu 8 registru PWR_CR na 1.


    Registrovat PWR_CR (registr řízení výkonu PWR)

    PWR->CR |= PWR_CR_DBP; nebo PWR->CR |= 0x100; /* 0x100 = 1 000 0000 */
    Chcete-li změnit zdroj hodin ovladače LCD (a také hodiny RTC), musíte nejprve resetovat zdroj hodin nastavením bitu RTCRST (nastavení 1 až bit 23) v registru RCC_CSR (kontrolní/stavový registr).


    Registrovat RCC_CSR (kontrolní/stavový registr)

    RCC->CSR |= RCC_CSR_RTCRST;
    Nebo zápisem hodnoty do registru pomocí operátoru „|=“, protože hodnota podle
    výchozí registr se liší od 0x0:
    RCC->CSR |= 0x800000; /* 0x800000 = 1000 0000 0000 0000 0000 0000 */
    Chcete-li vybrat nový zdroj hodin, musíte odstranit bit RTCRST:
    RCC->CSR &= ~RCC_CSR_RTCRST; nebo RCC->CSR &= ~0x800000;
    Jako zdroj hodinového signálu je zvolen externí nízkofrekvenční generátor. Chcete-li zapnout generátor v registru RCC_CSR, musíte nastavit bit LSEON (nastavit 1 až 8 bitů):
    RCC->CSR |= RCC_CSR_LSEON; nebo RCC->CSR |= 0x100; /* 0x100 = 1 000 0000 */
    Po zapnutí generátoru nějakou dobu trvá, než se stabilizuje. Připravenost generátoru se kontroluje hardwarovým nastavením bitu LSERDY v registru RCC_CSR:
    while(!(RCC->CSR&RCC_CSR_LSERDY));
    Výběr externího nízkofrekvenčního generátoru jako zdroje hodin se provádí nastavením registru RCC_CSR na 01 ve skupině RTCSEL:
    RCC->CSR |= RCC_CSR_RTCSEL_LSE; nebo RCC->CSR |= 0x10000; /* 0x10000 = 01 0000 0000 0000 0000 */
    V ovladači LCD musíte nastavit požadovaný režim zkreslení. K tomu je potřeba v registru LCD_CR (řídicí registr LCD) nastavit hodnotu 10 ve skupině BIAS. Před instalací bitů je nutné vyčistit bity od „odpadků“.


    Registr LCD_CR (řídicí registr LCD)

    Reset bitů:
    LCD->CR &= ~LCD_CR_BIAS; nebo LCD->CR &= ~0x60;
    Výběr režimu zkreslení=1/3 pomocí bitové masky:
    LCD->CR |= LCD_CR_BIAS_1; nebo LCD->CR |= 0x40;
    Nastavte režim provozu=1/4. Za tímto účelem také nejprve resetujeme všechny bity:
    LCD->CR &=~LCD_CR_DUTY; nebo LCD->CR &= ~0x1C;
    Nastavte hodnotu 011 na skupinu DUTY registru LCD_CR pro
    režim provozu = 1/4:
    LCD->CR |= LCD_CR_DUTY_0|LCD_CR_DUTY_1; nebo LCD->CR |= 0xС;
    Aktivujeme funkci opětovného přiřazení pinů. Chcete-li to provést, nastavte 1 až 7 bitů registru LCD_CR:
    LCD->CR |= LCD_CR_MUX_SEG; nebo LCD->CR |= 0x80;
    Nastavíme hodnoty koeficientů frekvenčního dělení hodinového signálu LCDCLK. Hodnoty koeficientů se nastavují v registru LCD_FCR (LCD frame control register). Nejprve také vymažeme všechny bity a poté nastavíme potřebné.


    Registr LCD_FCR (registr řízení rámců LCD)

    LCD->FCR &= ~LCD_FCR_PS; LCD->FCR &= ~LCD_FCR_DIV; nebo LCD->FCR &= ~0x3C00000; LCD->FCR &= ~0x3C0000;
    Hodnoty koeficientů dělení frekvence hodinového signálu jsou nastaveny na ck_ps = LCDCLK/16, ck_div = ck_ps/17. Chcete-li to provést, nastavte 1 až 24 a 18 číslic:
    LCD->FCR |= 0x1040000; /*0x1040000 = 1 0000 0100 0000 0000 0000 0000*/
    Chcete-li nastavit požadovanou úroveň kontrastu, musíte ve skupině CC nastavit hodnotu 010 a také nejprve vymazat bity ze starých hodnot:
    LCD->FCR &= ~LCD_FCR_CC; LCD->FCR |= LCD_FCR_CC_1; nebo LCD->FCR &= ~0x1C00; LCD->FCR |= 0x800; /*0x800 = 1000 0000 0000*/
    Po nastavení všech hodnot nějakou dobu trvá synchronizace registru LCD_FCR. Synchronizace registrů se kontroluje nastavením bitu FCRSF v hardwaru v registru LCD_SR (stavový registr LCD).

    Registrovat LCD_SR (stavový registr LCD)

    While(!(LCD->SR&LCD_SR_FCRSR));
    Jako zdroj napětí pro LCD zvolíme interní zvyšovací převodník do tvaru V lcd. Za tímto účelem je první bit registru LCD_CR (řídicí registr LCD) nastaven na 0:
    LCD->CR &= ~LCD_CR_VSEL; nebo LCD->CR &= ~0x2;
    Činnost ovladače LCD je povolena nastavením bitu registru LCD_CR (řídicí registr LCD) na 0:
    LCD->CR |= LCD_CR_LCDEN; nebo LCD->CR |= 0x1;
    Po instalaci interního zvyšovacího měniče jako zdroje napětí je třeba počkat, až bude připraven. Připravenost se kontroluje hardwarovým nastavením bitu RDY v registru LCD_SR (stavový registr LCD):
    while(!(LCD->SR&LCD_SR_RDY));
    Poté, co necháte ovladač LCD pracovat, musíte počkat, dokud nebude připraven. Připravenost se kontroluje hardwarovým nastavením bitu ENS v registru LCD_SR (stavový registr LCD):
    while(!(LCD->SR&LCD_SR_ENS));

    Vytvoření obrazu na LCD

    Všechny segmenty indikátoru jsou sloučeny do skupin COM0 - COM3 po 24 segmentech (SEG0-SEG23). Informace o segmentech jsou uloženy v registrech LCD_RAM ​​v paměti ovladače LCD. Rozložení PCB je takové, že čísla segmentů neodpovídají číselným číslům registrů LCD_RAM ​​​​.

    Chcete-li zobrazit 1 na první číslici LCD, musíte rozsvítit segmenty 1B, 1C. Segment 1B patří do skupiny COM0, segment 1C patří do skupiny COM1. Informace o nich se tedy musí zapisovat do registrů RAM (LCD_RAM0), RAM (LCD_RAM2), resp. Segment 1B je zodpovědný za LCD výstup LCDSEG22, informace o něm jsou uloženy v bitu SEG40 registru RAM (LCD_RAM1). Pomocí funkce přemapování bude segment LCDSEG22 přiřazen bitu SEG28 registru RAM (LCD_RAM0). Segment 1C je zodpovědný za LCD výstup LCDSEG1, informace o něm je uložena v bitu SEG1 registru RAM (LCD_RAM2).

    LCD->RAM= 0x10000000; /*0x10000000 = 1 0000 0000 0000 0000 0000 0000 0000 */ LCD->RAM = 0x2; /*0x2= 10 */
    Před zápisem hodnot do paměťových registrů je nutné zkontrolovat, zda byl dokončen předchozí přenos dat na LCD. K tomu se kontroluje bit UDR (Update display request) registru LCD_SR (LCD status register). Ovladač LCD má dvě výstupní vyrovnávací paměti, informace se zadávají do první vyrovnávací paměti a na LCD se vydávají z druhé vyrovnávací paměti. Bit UDR se nastavuje během přenosu z první vyrovnávací paměti do druhé a chrání registry LCD_RAM ​​před zápisem:
    while(LCD->SR & LCD_SR_UDR);
    Po zapsání informací do registrů LCD_RAM ​​​​je třeba nastavit bit UDR v registru LCD_SR (stavový registr LCD) (nastavit 1 až 2 bity):
    LCD->SR |= LCD_SR_UDR; nebo LCD->SR |= 0x4; /*0x4 = 100 */