Páskování stm32 popis a programovací instrukce. Připojení mikrokontroléru

Jednoho dne jsem se rozhodl upgradovat svou řadu vývojových desek. V tuto chvíli necítím žádnou zvláštní potřebu pracovat s novými ovladači, takže bylo rozhodnuto provést zásadně odlišné ladění. V něm jsem chtěl implementovat následující funkce:

Možnost autonomního provozu. Někdy si opravdu chcete vzít nějaké zařízení s sebou „na procházku“ nebo do práce, ale předchozí desky vyžadovaly externí napájení. Napájení bych chtěl mít na samotné desce.

Použijte dostatečně výkonný čip. Protože jsem své ladění používal na stm32f100 po dlouhou dobu, s postupem projektů jsem si uvědomil, že chci čipy využít na maximum. Vzhledem k tomu, že mi možnosti druhého jmenovaného nestačily (málo nohou a nízká frekvence 24 MHz), rozhodl jsem se přejít na o něco větší čip: STM32F103, na kterém jsem již úspěšně ladil, ale nebyl příliš rozšířen .

Použijte baterie 18650, které tak miluji pro jejich poměr kapacita/cena.

Použijte vestavěný řadič napájení mini-usb na MCP73833. Chtěl jsem zkusit vyrobit tovární desku s dobrým odvodem tepla z čipu a podívat se, jaké by to bylo přetaktovat tento regulátor nabíjení bez externího chladiče.

Použijte můj oblíbený TPS63000 k vytvoření 3,3V linky. Není to příliš účinný regulátor výkonu, pokud jde o klidový proud, ale funguje jako převodník boost/buck, který umožňuje využít veškerou energii baterie při výstupu vysokého proudu (jednotky ampérů).

Označte všechny signální piny desky.

No, maličkosti:

Quartz 5032 (za celou dobu provozu ani jedna porucha)

Smd0603+conders 0805 na nejmenších stopách.

Oddělení analogového a digitálního uzemnění v zařízení

Konektory s roztečí 2,54 typu samice (PBS20), abych do mých prkének vyrobených s kořistí nainstaloval konektory, které mám ve velkém množství stejného typu, ale samec (vyjde to levněji).

Zcela jednostranné pájení (kromě bateriových konektorů).

Testování DC-DC měniče.

Poté jsem začal testovat. Pro tento účel jsem speciálně zakoupil rezistor SQP5-4R7 pro testování DC-DC regulátoru na proud ~1A. V důsledku testů se odpor zahřál na 110 * C (rozpoznal pyrometr), což vedlo k určitému poklesu odporu a zvýšení proudu na 1A.

V důsledku toho bylo zjištěno, že nedochází k žádnému dodatečnému šumu a celý systém fungoval jako hodinky. V tomto případě je teplota DC-DC měniče v rozmezí 35-40*C při vnější teplotě +27*C. Samozřejmě chápu, že se zvyšujícím se zatížením se zvýší i pulzace, ale myslím si, že když z napájecího vedení mikrokontroléru funguje dostatečné výkonové zatížení, nebude vyžadována zvláštní přesnost analogové části.

Testování nabíječky.

Upřímně, toto je poprvé, co jsem se rozhodl vyrobit komerčně vyráběnou desku s MCP73833. Minule jsem se podíval, jak se tento ovladač obecně nabíjí a funguje + se v praxi seznámil s algoritmem jeho fungování. V tomto případě, jelikož se blížila moje promoce a já si to chtěl opravdu vyzkoušet, jsem předchozí desku jednoduše rozebral a všechny součástky opatrně přenesl na novou. Ve výsledku jsem při nabíjení baterie po předchozím testu zaznamenal, že při nabíjecím proudu 375 mA nedosáhla teplota regulátoru nabíjení ani 45 *C. To naznačuje, že můžete bezpečně přepájet odpor pro řízení nabíjení, abyste zvýšili nabíjecí proud. Zvednu to na 500mA, ale dál už nepůjdu. Není to dáno teplem, které se bude generovat na mikroobvodu, ale tím, že ne všechny mé pětivoltové zdroje pro mobilní telefony produkují více než 500mA. V těch, na které jsem se díval, nejsou žádné speciální ochrany, což může vést k problémům v elektrické síti.

Nevýhody vyvinuté desky.

Po provedení těchto testů a také při představě, jak budu s touto deskou v budoucnu pracovat, se ukázalo několik faktorů, které jsem v tomto projektu nezohlednil:

Neměl jsem dostatek zkušeností s trasováním, abych instaloval vypínač na baterii v tomto plošném spoji. Samozřejmě to zvládnu velmi dobře vytažením 18650 z konektoru nebo instalací speciální plastové destičky. Ale tohle je berlička, přátelé. Bylo by hezké dokončit výměnu.

Na desce není BMS pro baterii, i když je potřeba. Čistě technicky TPS63000 pracuje v rozsahu vstupního napětí 1,8-6V. To je možné, pokud je baterie hluboce vybitá a povede k jejímu poškození. Tento problém lze vyřešit nějakou úpravou samotné baterie a instalací levné bms přímo na baterii se zatlačením/odříznutím jednoho z kontaktů. Opět ne kriticky, ale s berlemi.

Do USB konektoru není nic připojeno přes digitální linky. Tento ovladač má vestavěné USB rozhraní, ale ke konektoru jsem ho nepřipojil. Je to dáno tím, že v současných projektech to není nutné a nikdy jsem neměl možnost na desku osadit běžné usb rozhraní (s ochrannými diodami a čipem pro přizpůsobení úrovně).

Na desce není žádná LED dioda PowerGood. Když čip funguje, nic o tom neříká. To bylo provedeno záměrně, aby se prodloužila životnost baterie, ale někdy to není pohodlné. V budoucnu uvažuji o výrobě LED na málo používaném kolíku a poskytnutí odkazu na kód pro zapnutí LED při provozu ovladače

Nedostatečná kompaktnost desky. Aktuální rozměry desky jsou 34x80 mm. Vždy chcete kompaktnější řešení. Třeba to vyjde. I když na druhou stranu na zadní straně plošného spoje moc místa není.

Někteří lidé považují programovací konektor a resetovací tlačítko za nepříliš pohodlné. Je těžké se k němu dostat, když je deska uvnitř, ale opět můžete použít šroubovák (berle).

Cena zařízení je poměrně vysoká. Dělal jsem prototypovou výrobu v panelu, takže cena je snížená, ale do čínského arduina/stmka za 200 rublů má čert daleko.

Každý, kdo něco takového chce pro sebe.

V současné době existují 2 takové desky, takže si je může kdokoli koupit za 1 700 rublů bez dopravy a baterie 18650 Proč nepošlu baterii? – to je záležitost ruské pošty. Byl bych rád, kdyby poslali baterie, i když prvnímu, kdo si objedná, zkusím poslat jednu plechovku 18650 s přístrojem zdarma.

Kontaktovat mě můžete na mail: [e-mail chráněný]

Z mého pohledu k ceně: nyní za tyto peníze můžete koupit originální Arduino nebo objev z Číny. Bez externího bodykitu a baterií si s sebou ale nemůžete vzít ani jedno, ani druhé na celý den. A tady dostanete hotovou věc, do které můžete vložit svou desku a získáte velmi tuhou konstrukci, kterou můžete bezpečně nosit s sebou bez obav, že se někde uvolní pájka nebo dojde ke zkratu zařízení.

Obrázek 1. Schéma zapojení desky STM32F103RC

Některá vylepšení. Verze 1.0.

Náhodou jsem se při přípravě desky na první prodej (nikoliv můj pájený vzorek výše) rozhodl přidat k ní řadu funkcí pro spotřebitele.

Na první pohled vynikají následující věci:

Neexistuje žádný „hřeben“ PBS-30 pro vložení do DPS. K mé lítosti zde působí 2 faktory (došly mi a zákazník požádal, aby je neinstaloval.

Programovací konektor je vyroben s různými úhlovými kolíky. Minule jsem chtěl také použít takové špendlíky, ale v pro mě dostupném obchodě je neměl. Výsledkem bylo, že jsem se náhodou dostal na jeden z moskevských rozhlasových trhů, kde jsem našel nejširší výběr těchto konektorů a koupil si ty, které jsem potřeboval.

LEDky jsou trochu jiné. K mé lítosti beru SMD LED z velké hromady a ne vždy vím, jakou mají barvu. Tentokrát jsou zde dvě zelené a jedna bílá LED.

Ale ďábel je často v detailech, a tak to dopadá i tady. Na této desce jsem zkoušel různé odpory pro ovládání nabíjecího proudu. V důsledku toho bylo zjištěno, že mikroobvod MCP73833 na této desce běžně drží proud 800 mA a při nabíjení 2,5 V Li-Ion bateriemi se zahřeje na 65-70 * C. Samozřejmě, podle datasheetu to funguje s proudy až 2A, ale upřímně si ještě neumím představit, jak je implementovat do pouzdra msop-10. Možná v dalším případě, ve kterém je tento problém vyřešen lépe, bude možné vytáhnout 2A.

Dalším malým detailem, kterého si málokdo vůbec všimne, je instalace induktoru Murata a nikoli jeho čínského dvojčete s neznámým jménem. Vypadají podobně, jen tento je lépe stíněný.

Opatření.

Při provádění úplného diagnostického testu jsem spálil jeden STM32F103RCT6. Jak jsem to udělal:

Vzal jsem běžný multimetr a píchl ho do zpětnovazebního rezistoru. V tomto případě TPS63000 vidí pokles napětí ve zpětné vazbě a začne rychle zvyšovat napětí na svém výstupu. V důsledku toho, podle testu provedeného s utěsněným regulátorem: napětí v pulzu se zvýšilo na 7V. V tomto případě regulátor zaznamenal přepětí a zemřel.

Později se stala legrační věc: na vstupu 3,6V začal regulátor spotřebovávat 0,6A. To je způsobeno tím, že TPS63000 má vestavěnou proudovou ochranu 2A. Právě tento proud protékal mrtvým mikrokontrolérem. Zároveň byla zachována funkčnost celého zbývajícího okruhu.

Diagnostikovat tento problém je snadné: stačí připojit samostatný měřicí teploměr (prst) k ovladači, a pokud se začne zahřívat, znamená to, že je mrtvý.

Balení zaslané desky

Při posílání této desky kolegovi jsem se rozhodl ji lépe zabalit, aby R. Post všechno nerozbil. Nakonec to dopadlo takto:





Tento článek, který je dalším „rychlým startem“ ve zvládnutí ARM řadičů, vám možná pomůže udělat první kroky k osvojení 32bitových ARM řadičů založených na jádře Cortex-M3 – řada STM32F1xxx. Snad se tento článek (který se na toto téma objevuje jako houby po dešti) bude někomu hodit.

Zavedení

Proč ARM?
1. Je z čeho vybírat (různí výrobci dnes vyrábějí více než 240 ARM ovladačů)
2. Nízká cena (např. za 1 $ můžete získat 37xI/O, 16K Flash, 4K RAM, 2xUART, 10x12bitADC, 6x16bitPWM).

Začněme naši práci s regulátory od ST Microelectronics. Ovladače založené na jádru ARM Cortex-M3 se vyznačují širokou škálou periferií, vysokou úrovní výkonových charakteristik a nízkou cenou
P.S. Na samém začátku se zdá, že ARM jsou nějaké hrozné stvoření (v pájení, kabeláži, programování) a to uvidíte sami.

Budeme tedy studovat ARM na příkladu řadičů STM32F1. Zároveň má tato řada několik linií:

  • Hodnotová řada STM32F100 - 24 MHz CPU, řízení motoru, CEC.
  • Přístupová linka STM32F101 - 36 MHz CPU, až 1 MB Flash
  • USB přístupová linka STM32F102 - 48 MHz CPU s USB FS
  • Výkonová řada STM32F103 - 72 MHz, až 1 MB Flash, ovládání motoru, USB, CAN
  • Propojovací linka STM32F105/107 - 72 MHz CPU, Ethernet MAC, CAN, USB 2.0 OTG

Existuje také následující klasifikace:

Řadiče STM32 lze vynutit spuštění ze 3 oblastí paměti (v závislosti na stavu pinů BOOT0 a BOOT1 při spuštění řadiče nebo po jeho resetu). Program můžete zapsat do paměti řídicí jednotky následujícími způsoby:

1 způsob:
Pomocí bootloaderu (je již zapsán do systémové paměti) a USART1(USART2 přemapováno): Používá interní 8 MHz hodinový signál. Ke spuštění vestavěného bootloaderu pevně zapojeného do ovladače od výrobce stačí hodit signál z převodníku RS232-3,3V (např. na bázi FT232RL) na tlapky ovladače TX1, RX1 a před tím set. BOOT0 = 1 a BOOT1 = 0, stiskneme RESET a můžeme šít program v ovladači. A je zašitý v programu Flash Loader Demonstartor od STM (pro Windows).

PS. Pokud používáte LINUX a nemáte ladicí desku typu discovery, můžete firmware nahrát do řadiče přes oblíbený rs-232 (ve skutečnosti přes převodník rs-232-3,3V). K tomu je potřeba použít python skript (Ivan A-R) (pro LINUX nebo MACOSX).
Nejprve musíte mít nainstalovaný Python 2.6 a knihovnu pro práci se sériovým portem – knihovnu PySerial.
Nyní, abyste mohli spustit skript stmloader.py (samozřejmě z terminálu), musíte jej trochu upravit, aby vyhovoval vašemu počítači: otevřete jej v textovém editoru.
Napíšeme do příkazového řádku
~$ dmesg | grep tty
zobrazit všechny sériové porty počítače.
a po napsání...
~$ setserial -g /dev/ttyS
zjišťujeme cestu k našemu 232. přístavu. Pokud si systém stěžuje na setserial, nainstalujte jej
~$ sudo apt-get install setserial
zjistíme cestu k našemu fyzickému portu (například můj je /dev/ttyS0). Nyní musíte tuto cestu zapsat do souboru skriptu stm32loader.py namísto výchozího „/dev/tty.usbserial-...“. Zadejte terminál
~$ python stm32loader.py -h
...abychom zavolali pomoc a nahráli firmware do našeho ovladače.

Metoda 2:
Přes USB OTG, využívající režim DFU, vyžaduje externí quartz na 8 MHz, 14,7456 MHz nebo 25 MHz (ne všechny řadiče s USB OTG mají tento bootloader; musíte se pečlivě podívat na označení vašeho řadiče)

3 způsoby:
JTAG/SWD. Pro ty, kteří mají demo desku typu Discovery nebo podomácku vyrobený programátor JTAG/SWD, můžete nahrát kód a již odladit svůj mikrokontrolér tímto způsobem. Pro JTAG má mikrokontrolér 6 nohou (TRST, TDI, TMS, TCK, TDO, RST) + 2 pro napájení. SWD používá 4 signály (SWDIO, SWCLK SWO, RESET) a 2 pro napájení.

PS. V prostředí EAGLE jsem načrtl několik prázdných obvodů pro 48, 64 a 100nohé ovladače (složka eagle) a stm32loader obsahuje skript stm32loader.py

Rozhodl jsem se napsat knihu...
... o skutečném vývoji zařízení na stm32. Proto si myslím, že pokud budou nějaké aktualizace, budou nepravidelné a většinou ve formě kousků z knihy.
Aby to nebyla nuda, je tu pro vás malinký kousek, dalo by se říci betaverze o quartzových rezonátorech a frekvencích obecně.

Samotné mikrokontroléry nemohou fungovat. Potřebují nejrůznější doprovodné prvky. Například STM32L05 může pracovat s USB bez jakýchkoli externích quartzových rezonátorů, ale STM32L152 nikoli. Pokud plánujeme v našich projektech používat více či méně přesný čas, pak životně potřebujeme externí quartzový hodinový rezonátor. Bez něj se časová ztráta 5-10 minut denně stane zcela normální. A navíc to nebude konstantní a závislé na teplotě, napájecím napětí a hromadě dalších věcí.

Ale nemá smysl číst datové listy jen tak, protože vám nic neutkví v hlavě. Obvykle začnu kreslit obvod, konzultovat datasheety pro úrovně a další věci a kostku pro možný účel nohou a celkovou konfiguraci krystalu. Když už jsme u konfigurace.

Hodiny, časování a pneumatiky

Jedním z nejčastějších důvodů, proč něco nefunguje, je nesprávná konfigurace frekvencí a všeho, co s tím souvisí. Nastal čas otevřít další záložku v kostce – Konfigurace hodin. Otevřel jsem nový projekt, vzal vybraný mikrokontrolér a zapnul rtc, usb a pár uart. Jen pro příklad. Otevřete kartu a uvidíte něco takového:

Vlevo jsou „zdroje“ hodinových signálů a vpravo jejich „přijímače“. Zatímco signál dosahuje z jednoho konce na druhý, může procházet přes násobiče a děliče, nebo možná přímo. Pro usnadnění je to, co kostka považuje za nesprávné, zvýrazněno červeně. Ne, můžete kliknout na tlačítko „vygenerovat kód“, zkompilovat výsledek a nahrát jej (programátor má vždy pravdu!), ale ovladač nebude fungovat.

Začneme zleva. Stm32 může mít vysoké (HS) a nízké (LS) zdroje hodin. Mohou být vnitřní (I) nebo vnější (E). Ty, které právě fungují, jsou zvýrazněny modře. Například se nyní používají dva zdroje – 37 kilohertz a 16 megahertz.

Nyní je vaším úkolem projít bludištěm a dát vše do správných pozic. Úkol je komplikovaný tím, že můžete vše nastavit na „zelenou“, ale pak zjistíte, že frekvenci uart nelze zvýšit nad 300 baudů. Obecně platí, že programátoři ST vymysleli jakousi hračku pro dospělé. Nyní si představte, že dříve bylo nutné toto vše spočítat ručně, po opakovaném čtení dokumentace a zjištění, zda to bude fungovat, lze provést pouze experimentálně.

V našem případě je vše jednoduché: změnou několika parametrů v PLL (programovatelný multiplikátor) jsem snadno nechal „červenou“ zmizet. Téměř.

Touto červenou tečkou nás autoři kostky odkazují na dokumentaci, která jasně říká, že bez externího quartz rezonátoru neuvidíme USB jako uši. Interní oscilátor příliš „plave“ a tento mikrokontrolér neumí využít taktování ze strany USB.

Dobře, pojďme na první kartu a poblíž RCC vidíme tento obrázek

Zakázat - to je pochopitelné, vypnuto. Bypass je příjem hodinového signálu z externího zdroje. Koneckonců, s stm můžete zajistit, aby spousta mikrokontrolérů pracovala ve stejném rytmu, protože to značně zjednodušuje otázky interakce mezi čipy. Například se to dělá na všech objevovacích tabulích, které jsem viděl. V části „programování“ je quartzový rezonátor, který „napájí“ čip programátoru, který zase vysílá hodinový signál do čipu na desce. No a posledním bodem je váš vlastní, abych tak řekl, osobní quartzový rezonátor.

Protože máme testovací projekt „pro zábavu“, oba je zapneme na „rezonátor“ a uvidíme, co se stane.

Jak vidíte, nesmíme měnit frekvenci „hodinového“ rezonátoru, ale nesmíme měnit frekvenci „rychlého“ – jak chceme. Opět budeme muset zajít do obchodu a podívat se, co mají, kolik dávají a zda nám budou vyhovovat.

Otevřeme datasheet (pro jistotu jsem ho vložil do 02_switch) a hledáme požadavky na quartz. Křemenné rezonátory mají kromě frekvence ještě dva parametry – kapacitu a frekvenci odbočování. Kapacita v pF je potřebná pro výpočet „startovacích“ kondenzátorů, ale s ppm je to trochu složitější

Zkratka ppm znamená části na milion neboli počet miliontin základní frekvence. Jinými slovy, chyba 100 ppm pro 100 MHz znamená frekvenční posun o 100/1000000 o 100 MHz. Frekvence tedy může jít o 100000000 * 100 / 1000000 = 10000 Hz (10 kHz nebo 0,01 MHz), to znamená, že konečná frekvence může být jakákoli v rozsahu 99,99 ... 100,01 MHz. Nebo jinými slovy, čím nižší ppm, tím lépe.

Takže se podíváme na datový list a najdeme následující desku

Podle ní může být náš „vysokorychlostní“ křemen od 0 do 32 megahertzů. Kub věří, že je to možné jen do 24 (a jinde se také mluví o maximální frekvenci 24 megahertzů). Ale upřímně doporučuji použít parametry ze sloupce Typ(ical) nebo "typické". Jak ukazuje moje praxe, jedná se o nejproblémovější čísla.

Když už mluvíme o křemeni, můžete si hrát se „sousedními“ frekvencemi v mocninách dvou. To znamená, podívejte se na 2, 4, 8 a 16 megahertzů. Vyhledávání provádíme již popsaným způsobem: levnější, lepší a lze pájet ručně.

Jak vidíte, jsou potřeba se zatěžovací kapacitou 20pF. Ale narazil jsem na 16 nebo 32. Co dělat? Jako obvykle si přečtěte datový list a podívejte se na řádek „AN2867 „Příručka návrhu oscilátoru pro mikrokontroléry ST““ (můžete si jej vzít na stejném místě jako ostatní doplňkové soubory knihy).

Stručně řečeno, existuje následující schéma

a tady je takový složitý vzorec

S využitím znalostí matematiky z 5. třídy střední školy (i když se mohu mýlit) vyřešíme tuto nejsložitější rovnici:
16 = (X*X)/(X+X)+3
16-3=X*X/2*X
13 = X/2
X = 26
Takže odpověď je, že kondenzátory CL1/2 by měly být 26pf. V přírodě takové věci nejsou, ale je tu 27pF, což je pro nás více než vhodné.
Nyní musíme vypočítat, zda se generátor spustí. O něco níže je vzorec

Počítáme
G=4*60*(2*3,14*(8*(10^6))^2*((7+16)*10^(-12))^2)
Umocňování jsem označil jako ^, což používá i Excel.
Je velmi snadné se splést, a tak jsem vytvořil jednoduchou počítací tabulku v Excelu (soubor se nazývá rezonátor)

Dosadíme tam nalezené hodnoty a podíváme se na hodnotu v buňce Gain. Podle dokumentace by to mělo být větší než 5. A čím více, tím lépe. Mám to tady. I když když vezmete rezonátor se zátěží 32pF, bude to méně.

Podobný postup bude nutné provést s „hodinovým“ křemenem.

Vrátíme se ke kostce a nastavíme hodnoty, současně přehodíme přepínače tak, aby nikde nebyla červená.

Jak vidíte, všude je vše v pořádku a mikrokontrolér bude pracovat na maximální frekvenci – 32 megahertzů.

Co takhle zkontrolovat?

Ale zajímalo by mě, jestli jsem vše spočítal správně. Musíme se nechat zkontrolovat. Dostanu popis na stm32l-discovery a otevřu tam schéma. Nacházím část s rezonátorem

A obecně, vezmeme-li v úvahu obvody jiných lidí, které zaručeně fungují a jsou určeny pro velké oběhy desek, mohou udělat velký pokrok v řešení otázek „jak se to dělá“.

Pokračování...

To znamená, že abychom namalovali jeden pixel na souřadnici X=1 Y=5, budeme si muset zapsat celý první sloupec nulté stránky X=1 Y=0-7. Chcete-li to provést, musíte buď uložit vyrovnávací paměť videa do ovladače; nebo před zápisem si blok přečtěte, poté upravte a teprve poté zapište; nebo mít dobrou představu o struktuře obrazovky a zohlednit ji při zobrazování nápisů, grafů, nákresů... V nejjednodušší - textové - verzi práce s takovými displeji stačí použít font, který je násobkem 8 bodů na výšku (1 stránka) a zobrazit jej v násobcích 8 bodů: 0,7 ,15…

Firmware/knihovna

Knihovna pro práci s displeji na ovladači ST7565R přes paralelní rozhraní 8080 v textovém režimu byla napsána na základě datasheetu a zdrojového kódu, který byl dodán s podobným displejem od jiného výrobce. Příkazy a byly převzaty a upraveny z mých dřívějších zobrazovacích projektů z a. Knihovna je vhodná pro displeje založené na řadiči ST7565R. Při používání je třeba vzít v úvahu vlastnosti každého jednotlivého displeje, například které ovládací čáry displeje jsou inverzní a které ne. Píše se také pod
rodina ovladačů stm32f1xx, při použití na jiných ovladačích musíte změnit funkci inicializace pinů a definovat zodpovědné za ovládání pinů.

Knihovna obsahuje následující funkce:

lcd_init_pins(); Inicializace pinů displeje
lcd_delay(dlouhé nepodepsané p); Zpoždění
lcd_write_data(nepodepsaný znak dat); odesílání dat k zobrazení
lcd_write_cmd(nepodepsaný znak cmd); Odesílání příkazů
lcd_Initial_Dispay_Line(nepodepsaný znak čára); Adresa prvního řádku displeje
lcd_Set_Page_Address(nepodepsaný znak přidat); Nastavit řetězec (nahrazen lcd_gotoxy)
lcd_Set_Column_Address(nepodepsaný znak přidat); Nastavit sloupec (nahrazen lcd_gotoxy)
lcd_Power_Control(nepodepsaný znak sv); Správa napájení
lcd_Regulor_Resistor_Select(nepodepsaný znak r);
lcd_Set_Contrast_Control_Register(nepodepsaný znak mod); Nastavení kontrastu displeje
lcd_init(neplatný); Inicializace displeje
lcd_clear(neplatný); Čištění displeje
lcd_gotoxy(nepodepsaný znak x,nepodepsaný char y); Nastavení textového kurzoru
x- sloupec, y- řádek (stránka)
nepodepsaný char lcd_symbol_decode(nepodepsaný znak C); Dekódování komprimované ASCII tabulky
C— kód znaku v ASCII
lcd_putch(nepodepsaný znak C); Zobrazení symbolu
C- symbol
lcd_putch_inv(nepodepsaný znak C); Výstup převráceného (stínovaného) znaku
C- symbol
lcd_puts(char *s); Linkový výstup
s- linka
lcd_puts_inv(char *s); Výstup obráceného řetězce
s- linka
void lcd_test(neplatný); Otestujte vyplnění displeje po sobě jdoucími znaky
lcd_putch_big_prototype(nepodepsaný znak kol,nepodepsaný char řádek,char C, nepodepsaný char inv); Výstup znaků x2 x4 x8 velikost
kol- šířka
řádek- výška
C- symbol
inv- inverze 0 - vypnuto, 1 - zapnuto
lcd_putch_big(char C); Výstup o velikosti symbolu x2
C- symbol
lcd_puts_big(char *s); Linkový výstup x2
s- linka
lcd_puts_int2(nepodepsaný znak proti); Tisk dvoumístného čísla (jednoduchá funkce)
proti— číslo od 0 do 99
lcd_puts_int(int proti); Zadejte číslo.
proti— číslo od -32768 do 32767
lcd_puts_long(dlouhé nepodepsané proti); Výstup dlouhého 4bajtového čísla (pozor! funkce zabírá hodně paměti)
proti— číslo od -2147483648 do 2147483647

Inicializace pinů displeje se provádí nastavením následujících definic v souboru ST7565R.h pro ovladače stm32f1xx.

#define INVERT_MODE 1 // překlopení displeje #define lcd_port_data GPIOB // port datové linky #define lcd_port_data_rcc RCC_APB2Periph_GPIOB // taktování portu datové linky #define lcd_port_data_offest 0 // offset, pokud není výchozí pin_0 |c GP_pins in_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

// datové řádky musí běžet po sobě ve vzestupném pořadí #define lcd_port_control GPIOB // port příkazového řádku #define lcd_port_control_rcc RCC_APB2Periph_GPIOB // taktování portu příkazového řádku #define lcd_pin_RS GPIO_Pin_14 //define_13GPlWd selection line /zapsat řádek #define lcd_pin_E_RD GPIO_Pin_12 // povolit řádek, oprávnění #define lcd_pin_CS1 GPIO_Pin_11 // řádek výběru krystalu/displeje #define lcd_pin_RST GPIO_Pin_15 // reset řádku

Pokud je rodina kontroléru odlišná, budete muset upravit nastavení pinů MK, funkce v souboru ST7565R.c: lcd_init_pins, funkce datového a příkazového výstupu - lcd_write_data, lcd_write_cmd a také definovat řídicí linky v ST7565R.h.

Ukázka programu, jehož výsledek je prezentován na prvních fotografiích.

Myslím, že není potřeba nic dodatečně komentovat, komentáře v kódu jsou dostatečné.

Článek aktualizován 23.04.2016

18 komentářů k “Připojení COG LCD displeje k ovladači ST7565R”

    Dobré odpoledne
    Pravidelně navštěvuji vaše stránky a sleduji nové aktualizace, protože... Sám jsem začal s obrázky a v současné době pracuji s stm32.
    Další dobrý článek! Škoda, že to nevyšlo o něco dříve)
    Před pár měsíci jsem se také musel vypořádat s řadičem ST7565 na obrazovce w012864C2-TFH od WINSTAR a napsat vlastní knihovnu pro ruská písma různých velikostí a stylů (připojení přes spi).
    Tento článek byl velmi užitečný:
    http://edeca.net/wp/electronics/the-st7565-display-controller/
    a program pro generování písem na stránce autora.
    Možná vás to bude také zajímat.

    Hodně štěstí a úspěchů ve všem.

    Bohužel, psaní tohoto článku mi trvalo dlouho. Začal jsem s tím už v prosinci minulého roku.
    Chtěl jsem to celé napsat podrobněji (softwarová část), ale nakonec jsem to včera dopsal na požadované minimum a vyvěsil. Možná k tomu v blízké budoucnosti trochu přidám.
    S těmito displeji pracuji s radostí více než 2 roky.

    Ve svých článcích zveřejňujete pouze základní kód pro spuštění a pochopení fungování modulu. Zajímalo by mě, jak organizujete výstup ruských znaků :)
    Tato otázka vyvstala při použití knihovny na displeji 1602, vzal jsem ji jako vzorek pro svůj projekt.
    Používám Keil a pro mě v obou případech byly potíže spojené s korelací ruského písmenného kódu v tabulce zobrazení s kódem v debuggeru)
    Zajímalo by mě, jaké vývojové prostředí používáte a jaké řešení jste použili =)

    S pozdravem, Yuri

    Nyní používám CooCox, s azbukou nemá problémy. V Keilu jsem nejprve knihovnu pro práci s displejem a všemi zprávami psal v ruštině v notepad++. Pak se nějak náhodou soubor přenesl, zdá se, do Unicode a odtud bylo možné pracovat s azbukou v Keilu. Nedokážu to přesněji vysvětlit, protože... Už jsem zapomněl, podle mého názoru byla tato otázka zodpovězena více než jednou v komentářích k dříve popsaným znakovým zobrazením pro stm32.
    Když jsem dostudoval a přešel k projektu, na kterém stále pracuji, hned mi došlo, že překročím limit 32KB a přejdu na jiné IDE.

    Trochu jsem článek doplnil.

    Vladimír píše 20.10.2016 v 20:15

    Nemáte náhodou převodník obrázků 128*64, abyste získali výstupní pole, jako v programu Generátor obrázků pro displej 84*48 od Nokie?

    Co si pamatuji, mám na svém webu 2 programy pro generátor obrázků. První generuje pro Nokii tzn. 84x48, toto je první verze programu a tento článek je označen jako zastaralý. Druhá verze generuje až 320x240.

    Je nepravděpodobné, že existuje něco pájitelného levněji než displej z Nokie 1202
    za cenu 70! r.

    O tom ten článek není. Přečtěte si pozorně předmluvu.
    Pokud to chcete použít ve svých návrzích, tak použijte displeje z mobilních telefonů, sám jsem to kdysi dělal, mimochodem mám několik článků o displejích od Nokie. Tento displej používám v sériovém zařízení a přešel jsem na něj i ve svých návrzích.

    Alexey píše 19.02.2017 v 00:40 Zapojení takových displejů je přibližně stejné, ale piny mohou být umístěny jinak, názvy pinů jsou stejné. Schéma zapojení se může mírně lišit.
    Ke zvolenému zobrazení je tedy v každém případě potřeba datový list. Schémata zapojení všech displejů jsem převzal z oficiální dokumentace speciálně pro konkrétní značky.
    Článek ukazuje 4 různé displeje, 3 (na zeleném šátku) mají stejný připojovací obvod a pinout a liší se od GG1286456FFWJ-A-R.

    Děkuju! velmi užitečné

    Alexander D píše 25.02.2018 v 18:34

    Dobré odpoledne
    Moje zařízení používalo poměrně vzácný zobrazovací modul COG s maticí 132x64 na řadiči Solomon SSD1815BZ. Bohužel se nic podobného v současnosti na internetu nenachází. Nejbližší je 132x64 na ovladači ST7567, někde jsem četl, že mají stejný příkazový systém. Podle pinoutu však ne všechny kontakty mají přímou korespondenci. Můžete nějak pomoci s tímto problémem? Tito. Je možné jeden nahradit druhým? A co se stane, když na řadič SSD1815BZ nainstalujete displej, ale s maticí 128x64 – bude to vůbec fungovat?

    Tyto displeje se dodávají s různými rozhraními SPI, i2c, 8080. Některé podporují několik, výběr se provádí podle příslušných pinů.
    Pro displeje se zájmem 8080: existuje 8 datových linek a 5 ovládacích linek, které mají různé názvy v různých zdrojích, dokonce i na mém webu na schématu zapojení je jeden název, ale na DPS, která byla vyvinuta mnohem dříve, je různé (na různých displejích byly použity různé datové listy, ale ovládací prvky jsou stejné); Moje objednávka je stejná, hledejte analogii pomocí těchto dvou obrázků.
    CS - výběr krystalů
    Reset (RST) - reset
    RS - výběr příkazů/dat
    E (A0) - rozlišení
    RW/RD - zápis/čtení
    Při zapojování takových displejů je třeba dávat pozor i na propojovací vedení násobiče kondenzátoru: CAP+- V1... Zde potřebujete datový list. Ale můžete zkusit vybrat analogicky, určitá závislost je viditelná z názvů, ale takové displeje mají několik obvodů pro připojení násobicích kondenzátorů.
    S povolením:
    Rozdíl v rozlišení a offsetu není velký, lze jej upravit buď při inicializaci (pokud existují příslušné příkazy), nebo kompenzovat při zobrazování dat.
    Inicializace má také své vlastní nuance:
    Volba napětí násobiče a obvodu pro připojení kondenzátorů násobiče, kontrast, začátek výstupu (úhel), horizontální/vertikální orientace, skenování (prokládané, sekvenční...)... To bude záviset na typu displeje. Zde mohou být kritické pouze první body, zbytek lze vybrat bez dokumentace během práce.

    Alexander D píše 27.02.2018 v 18:54

    Děkuji za odpověď!
    Obecně je situace taková, že možnost provádět jakékoli softwarové změny v kódu je značně omezena. Obvykle máme „černou skříňku“ s 18pinovým výstupem a anodou/katodou pro osvětlení. Tento konektor obsahoval displej, který je třeba vyměnit. K dispozici jsou datové listy, pinouts. Nic podobného na trhu není... Nejvhodnější displej dostupný na ST6757 s téměř stejným pinoutem (pořadí pinů je stejné, ale obrácené). Na novém displeji není žádný booster (násobič). Otázky týkající se korespondence pinů 1..5 u SSD1815BZ a 10..12 u ST6757. Jde jednoduše hloupě zapojit přes adaptér do konektoru další displej a co dodat na piny 10-12? Pokud máte čas a možnost pomoci radou, napište na email...

    Displej na SSD1815BZ
    1.V6 (Tento kolík je nejzápornější napájecí napětí LCD)
    2.V5
    3.V4
    4.V3
    5.V2 (V2-V5 — Toto jsou úrovně řídicího napětí LCD)
    6.C2P
    7.C2N
    8.C1N
    9.C1P
    10.C3N
    11.VEE
    12.VSS
    13.VDD
    14.SDA
    15.SCK
    16.D/C
    17./RES
    18./CS
    K
    A

    Zobrazit na ST6757
    1.A
    2.K
    3./CS
    4./RES
    5. A0 (D/S)
    6.SCK
    7.SDA
    8.VDD
    9.VSS
    10.V0 (kladné napájecí napětí ovladače LCD)
    11.XV0 (záporné napájecí napětí ovladače LCD)
    12.VG (napájecí napětí LCD pro segmenty)

V poslední době se na Habrém objevilo mnoho článků o STM32 (). Komentáře opakovaně zmiňují složitost STM32 ve srovnání s AVR. Toto téma se týká zejména začátečníků, kteří se chtějí začít učit mikrokontroléry, a když vidíte tento názor, vyberte si ke studiu AVR. Podívejme se, jestli je tato bestie - STM32 - tak komplikovaná?

Abychom to udělali, vybereme levnou verzi desky a napíšeme firmware v tuctu nebo dvou bytech (ano, blikání 2 kilobajtové LED diody je pro neschopné jako „Hello world“ ve stovkách kilobajtů x86). Naučíme se také psát programy v libovolném programovacím jazyce pro STM32.

Zavedení

Jaký typ mikrokontrolérů bych měl studovat? Tato otázka je podle mého názoru podobná otázkám jako „Jaký programovací jazyk se mám naučit?“, „Jaký cizí jazyk se mám naučit?“ IMHO je potřeba si nastudovat ten, který je v danou chvíli nejvíc potřeba, pro daný úkol. Když víte jednu věc, naučit se druhou bude mnohem snazší a na třetí nebudete ani myslet.

Jaká je tedy obtížnost STM32? Nejčastějším názorem je, že programování jeho periferií je obtížné. Počet a typ periferií STM32 a AVR jsou přibližně stejné. Jeho konfigurace se také příliš neliší. Jaká je tedy obtížnost? V mikrokontrolérech STM32 musí být všechny periferie nejprve zapnuty. V tom je celá obtíž.

Srovnávám AVR s veřejnými budovami: všechny dveře jsou dokořán, všude se třpytí monitory reklamou a svítí světla, a STM32 se soukromým domem: pokud chcete sledovat televizi, nejprve ji zapněte, pak změňte kanály, pokud chcete chtít čůrat, otevřít dveře a rozsvítit, umýt si ruce – otevřít vodu a tak dále. nevěříš mi? Pojďme se společně přesvědčit.

Přehled desky

Vybral jsem nejlevnější desku nabízenou na aliexpressu (obrázek výše). Trochu dražší 2 $, 180 rublů v prosinci 2015. Na palubě je minimální vybavení: dva quartzové rezonátory - vysokofrekvenční na 8 MHz a hodiny na 32,768 Hz, resetovací tlačítko, dva propojky pro výběr režimu spouštění, pár LED diody - pro napájení a na noze PC13 a sada konektorů: microUSB, debug, dva hřebínky pro všechny piny mikrokontroléru.

Je levnější prostě koupit všechny díly, vyrobit si desku a připájet ji. Jak šít a ladit? Pokud máte ST-LINK, tak je to pro ně lepší, ne, nevadí, možností je více, např. přes USB-USART adaptér, nic takového neexistuje - můžete přímo přes USB, i když musíte si pro tento případ napsat ovladač sami, zatím se nikdo neobtěžoval. ST-LINK je poměrně levný a je součástí všech desek řady DISCOVERY. Tak jsem použil tento.

Připojíme napájení, LEDka vesele bliká, deska funguje. Stáhněte a nainstalujte programátorský program (olej-olej) „STM32 ST-LINK Utility“ (všechny programy a dokumenty přebíráme z webu výrobce). Pokoušíme se načíst firmware... Program je chráněn proti čtení. Zdá se, že ne nadarmo všichni mluví o obtížnosti psaní programů pro STM32, dokonce i Číňané chránili tento extrémně složitý program před hackováním. Nebo je tam skrytá záložka viru? Na to nepřijdeme, odstraníme ochranu a získáme nedotčený mikrokontrolér STM32F103C8T6.

První program

Pojďme také zablikat LED a provést takříkajíc reverzní inženýrství v mysli nativního firmwaru. Jak? Abych nevyvolal kontroverzi ohledně výběru vývojového prostředí, udělám to ve své nativní komunitě Visual Studio. Zdá se mi, že lepší Windows pro muže neexistuje.

Jak je na tom blikající program pro Arduino? Nakonfigurujeme výstupní nohu a přepneme ji v cyklu z nuly na jedničku a zpět.
Jak to bude vypadat pro STM32? Mnohem obtížnější. Nejprve rozsvítíme světlo v konfigurační místnosti mikrokontroléru a poté „Nakonfigurujeme nohu pro výstup a přepneme ji v cyklu z nuly na jednu a zpět.“ Chápu, že je to těžké... Ale my to zvládneme.

V dokumentu „RM0008. Reference Manual" na našem mikrokontroléru, podívejme se na mapu paměti pro registry, které potřebujeme.

- Pojďme jednoduše a logicky.
- Pojďme spolu.

1. Zapněte taktování portu C (naše LED visí na kolíku 13 portu C). Podívejme se na dokument. Registr, který potřebujeme, je RCC_ABP2ENR (překládáme: registr reset a hodin je druhá nízkorychlostní periferní sběrnice). Adresa portu je 0x40021018, požadovaný bit IOPCEN (I/O port C - bit povolení), čtvrtý je 0x00000010.

Ustoupit

Mikrokontroléry mají vše jako dospělé procesory. Existuje vysokorychlostní pneumatika AHB alias „Northbridge“ a nízkorychlostní APB aka „Southbridge“. Samotný procesor mikrokontroléru může udělat vše pro urychlení práce: má přednačítání příkazů a kanál provádění příkazů. Chybí vyrovnávací paměť, ale procesor není o moc rychlejší než paměť a čtení a zápis do paměti lze dokončit v jednom taktu. Dá se tedy říci, že celá paměť mikrokontroléru je jedna velká cache. Dobře, dobře, ani jeden a ani velký. Dvě malé kešky.
Všechny periferie jsou mapovány do adresního prostoru. Oproti x86 zde nejsou žádné in-out příkazy, ale Intel je nechal pouze kvůli kompatibilitě, nyní se prakticky nepoužívají.


2. Nakonfigurujte pin pro výstup. Podívejme se na dokument. Registr, který potřebujeme, je GPIOC_CRH (překládáme: registr I/O portu C je konfigurační registr pro starší polovinu nohou). Adresa portu je 0x40011004, za konfiguraci každé větve odpovídají 4 bity, hodnota pro přepnutí větve na výstup je 0001b, pro pin 13 je hodnota 0x00100000.

3. Jak přepnout booleovskou hodnotu na pinu. Podívejme se na dokument. Registr, který potřebujeme, je GPIOC_ODR (překládáme: registr I/O portu C - registr výstupu dat). Adresa portu je 0x4001100C, její hodnota je přímo vyvedena na piny mikrokontroléru, pro pin 13 je hodnota 0x00002000. Vše je připraveno k napsání programu (nezapomeňte zveřejnit projekt na githubu):

Int main (void) ( *((int *) 0x40021018) = 0x00000010; // rcc_apb2enr = rcc_apb2enr_iopcen *((int *) 0x40011004) = 0x00100000; // gpioc_crh = moder_output_13 while (1) ( *) ( *((((valatile int *) 0x4001100C) ^= 0x00002000; // GPIOC_ODR ^= BIT_13 int i; __attribute__ ((section(".isr_vector"))) int g_pfnVectors = ( (int)&_eram, // počáteční hodnota zásobníku (int)main // Reset Handler );
Doufám, že s vektory přerušení je vše jasné? Používáme pouze dva z nich, takže není třeba plýtvat pamětí figurínami. Všechna ostatní přerušení jsou povolena softwarem, pokud nejsou povolena, nikdy nebudou fungovat. Výjimkou je třetí vektor HardFault, pokud k němu dojde - mikrokontrolér je vadný nebo nefunkční, u jednoduchých projektů (ne kosmického letectví, ne medicíny) jej nelze zpracovat.

Toto je vzdělávací projekt, všechny adresy by samozřejmě měly být formátovány jako symbolické konstanty v samostatném h-souboru s velkým množstvím definic, jak se to dělá v CMSIS. Můžete si je vzít a přizpůsobit svým potřebám. Pro kompilaci používám gcc, firmware pomocí „STM32 ST-LINK Utility“. Firmware zabral 56 bajtů (ahoj, assembler).

Další ústup

Dalším prohlášením o složitosti STM32 je, že v ruštině je málo dokumentace. Diskutabilní. Jsou potřeba pouze dva dokumenty – datový list a referenční příručka pro požadovaný mikrokontrolér. Jazyk, ve kterém je napsán, lze jen stěží nazvat anglickým. Jazyk jsem studoval pomocí nepřeložených hraček, moje úroveň angličtiny zůstala na stejné úrovni, ale datasheety čtu bez problémů, neznámé pojmy jsou z kontextu jasné.



Zdá se, že se toho stalo hodně, a to je pro dnešek vše.

V druhé polovině budu hovořit o programování STM32 v libovolném programovacím jazyce.

Štítky: STM32, mikrokontroléry-jsou-snadné, arduino-není potřeba