BluePill STM32F103C8T6 jako Arduino - 長征

Odpovědět
jankop
Příspěvky: 700
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od jankop » 18 lis 2020, 19:12

Blíží se dlouhé zimní večery a koronavirus útočí s jistotou Ljudmily Pavličenkové. Zdejší diskuze ohledně bootloaderu STM32F103C8T6 mě inspirovala. Kdysi jsem si BluePill objednal včetně ST-Link II. Ovšem ten programátor byl nakonec něco jiného a já to odložil vše do šuplíku. Tak jsem se zase osmělil a a tu věc, které se, kdo ví proč, přezdívá stejně jako Viagře, jsem vytáhl zase na světlo. Držím se pevně zásady:" Když všechno selže, přečti si návod!" a vyhledal jsem referenční manuál. Má 1134 stran a zatím jsem v polovině jeho úvodního slova :D Jako jádro jsem zvolil hodem mincí STM32duino a hledal jaký USB bootloader použít, abych se vyhnul sériovému převodníku. Nakonec jsem se nějak dopracoval k STM32duino + USB HID bootloader 2.2. Bootloader má 2kB a dá se říct, že s ním nahraji z Arduino IDE vše, co potřebuji. Jsem v počátcích, ale zatím mne zarazily dvě věci.
Z prvních experimentů to vypadá, že STM32F103 s jádrem STM32duino potřebuje mnohem více paměti flash i RAM než třeba běžné Arduino UNO. Pro program BareMinimum, což jsou jen prázdné smyčky setup() a loop() IDE hlásí:

Arduino UNO
Projekt zabírá 444 bytů (1%) úložného místa pro program. Maximum je 32256 bytů.
Globální proměnné zabírají 9 bytů (0%) dynamické paměti, 2039 bytů zůstává pro lokální proměnné. Maximum je 2048 bytů.
Arduino STM32F103C8T6 / 128KB s podporou Serial bez podpory USB
Projekt zabírá 6260 bytů (4%) úložného místa pro program. Maximum je 131072 bytů.
Globální proměnné zabírají 780 bytů (3%) dynamické paměti, 19700 bytů zůstává pro lokální proměnné. Maximum je 20480 bytů.
Arduino STM32F103C8T6 / 128KB s podporou USB jako Serial - komunikační ekvivalent Arduino UNO
Projekt zabírá 36080 bytů (27%) úložného místa pro program. Maximum je 131072 bytů.
Globální proměnné zabírají 5112 bytů (24%) dynamické paměti, 15368 bytů zůstává pro lokální proměnné. Maximum je 20480 bytů.

Zkusil jsem i náročnější aplikace, ale nároky na paměť se mi zdají nepřiměřeně vysoké. Ani druhý poznatek mě nepotěšil. Arduino UNO je 8 bitové, STM32F103 je 32 bitové a má 4,5 x vyšší taktovací frekvenci. Ovšem moje testy ukazují, že rozdíl v rychlosti zpracování programu je poměrně malý. Hovořím stále o platformě Arduino a malým rozdílem myslím skutečnost, že STM32 se mi jeví třeba cca 1,5x rychlejší než UNO. To všelijaké testování a zkoušení zabere hodně času, speciálně kompilace pro STM32 trvá na mém PC ukrutně dlouho. Proto bych ocenil, kdybyste prezentovali svoje zkušenosti, pokud nějaké máte. A ještě jsem narazil na jednu věc, která mě trápí. Nahraju do Arduino UNO i Blue Pill stejný program, který cosi vypisuje na sériový port COM (pochopitelně mám na mysli Virtual COM, tedy převodník USB/RS232). Když spustím Serial Monitor z Arduino IDE, tak výstupy z obou Arduin fungují. Když však použiji jakýkoliv jiný seriový terminál, tak mi funguje pouze výstup z Arduino UNO. BluePill COM je ready, terminál se připojí, ale nic nevypisuje. Je to pro mě naprosto nepochopitelné. Poraďte!

pavel1tu
Příspěvky: 1772
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od pavel1tu » 18 lis 2020, 19:47

Tak ať toho nemáš málo https://github.com/Serasidis/STM32_HID_ ... r/releases

Zatím staženo, netestováno
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

jankop
Příspěvky: 700
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od jankop » 18 lis 2020, 20:26

Tak ať toho nemáš málo https://github.com/Serasidis/STM32_HID_ ... r/releases
Tento bootloader používám. Vyhodnotil jsem ho jako funkční a nejmenší a jak zmiňuji, dokážu s ním v Arduino IDE v vcelku spolehlivě pracovat.

ondraN
Příspěvky: 385
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od ondraN » 18 lis 2020, 20:41

Pokud nebudeš psát programy za použití nějakého jiného prostředí, je to dost ztráta času. Využít všechny finesy STM32 (konfiguraci rychlosti sběrnic, DMA pro UARTY atd) s arduino IDE nemůžeš. Velice slušné řešení je použití CubeMx a CubeIDE (nakonfigurované Eclipse).
Co jsem s tím experimentoval před přechodem na výše uvedené prostředí, narazil jsem na problémy s knihovnami, které spíš nefungují, podpora USB sežere hodně paměti, nedá se krokovat , zrychlení běhu programů je minimální atd.
Po přechodu na nové IDE nedám na STM dopustit. Dají se koupit i Nucleo moduly s jinými STM procesory a integrovaným ST Linkem a tím se neuvěřitelně rozšíří možnosti.

jankop
Příspěvky: 700
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od jankop » 18 lis 2020, 21:45

Zkusím se podívat na to CubeMx a CubeIDE a uvidím, jestli to zvládnu. Je to něco dost jiného než Arduino. Nechtěl bych skončit u assembleru, jako kdysi u PIC.

pavel1tu
Příspěvky: 1772
Registrován: 26 říj 2017, 08:28
Reputation: 1
Bydliště: Trutnov
Kontaktovat uživatele:

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od pavel1tu » 18 lis 2020, 22:22

jankop píše:
18 lis 2020, 20:26
Tento bootloader používám. Vyhodnotil jsem ho jako funkční a nejmenší a jak zmiňuji, dokážu s ním v Arduino IDE v vcelku spolehlivě pracovat.
Ach, přehlédl jsem, nějak jsem jen zaznamenal pokusy s tím druhým bootloaderem.
UNO, NANO, Mikro, PRO mini, DUE
Pavel1TU

ondraN
Příspěvky: 385
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od ondraN » 19 lis 2020, 07:34

jankop píše:
18 lis 2020, 21:45
Zkusím se podívat na to CubeMx a CubeIDE a uvidím, jestli to zvládnu. Je to něco dost jiného než Arduino. Nechtěl bych skončit u assembleru, jako kdysi u PIC.
Tak u asm rozhodně neskončíš :D
CubeMx slouží ke konfiguraci MCU, protože ta je z uživatelského hlediska dost složitá (alespoň v začátcích). Konfigurují se zde jednotlivé periferie (UART, I2C,SPI...), funkce IO pinů, vnitřní konfigurace hodinového signálu, DMA, časovače atd. Na závěr vygeneruje CubeMX celou kostru programu a přidá všechny všechny moduly periferii. Do kostry programu se pak na vyznačená místa přidává uživatelský kód. Konfiguraci lze spustit znovu a třeba něco přidat, nebo upravit, aniž by se to dotklo uživatelského kódu.
Pro každý MCU jsou knihovny periferii. U většiny jsou jak v úrovni LL (low level) tak i HAL (high level). Stm těmhle knihovnám říká firmware a pro každou je dost rozsáhlý popis. LL úroveň není pro složitěší periferie jako třeba USB. Všechny knihovny jsou v čistém C, hodně používají makra a pointery.
CubeMX se spouští buď samostatně, nebo se spustí automaticky z CubeIDE při tvytváření nového projektu (doporučuji). Projekt má strukturu klasického Céčkového programu (main.c main.h). Lze zapnout i režim C++, ale mě víc pro MCU vyhovuje klasika. K dispozici jsou všechny základní knihovny C99 a třeba u sprintf je i verze nano, optimalizovaná rychlosně i na velikost pro MCU.
Je integrovaný debuger, který umožňuje krokování, breakpointy, prohlížení a modifikace proměnných a spoustu dalších úžasných věcí, které v arduinoIDE úplně chybí.
Doporučuji sjet pár tutoriálů od stm (youtube) jak s prostředím pracovat a nějaké základy jak používat knihovny.
Není to úplně jednoduché, ale dá se to zvládnout celkem v pohodě.

jankop
Příspěvky: 700
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od jankop » 19 lis 2020, 10:22

Dík za komentář. Ještě včera v noci jsem si IDE a konfigurátor nainstaloval. Dost rozpačitě, protože ten MX houževnatě trval na jakési pět let staré Javě, bez které se nedal nainstalovat. A v okamžiku, kdy jsem na cosi kliknul, tak to začalo stahovat gigabajtový balíky. To mě docela iritovalo, tak jsem to vypnul. Miluju překladače, které do cílového kódu nezapomenou zahrnout i všechny existující cesty na zdrojovém PC. Uvidíme...
V každém případě jsi mi přiblížil základní skicu, což je důležité.

ondraN
Příspěvky: 385
Registrován: 08 srp 2019, 20:01
Reputation: 1

Re: BluePill STM32F103C8T6 jako Arduino - 長征

Příspěvek od ondraN » 19 lis 2020, 17:21

V té javě je jiný problém. pokud máš 64bitů windows, tak MX potřebuje 64bitovou javu. Pokud ale použijěš běžnou online instalaci javy, tak se vždycky nainsatluje 32bit java (alespoň na mojich třech kompech, kde jsem to instaloval). Musíš si stáhnout instalaci ze zip file pro 64 bitů a tu nainstalovat. Pak bude MX spokojený. GB balíky jsou OK, Eclipse je docela macek. Pak jsou ještě docela objemné balíky FW pro jednotlivé řady MCU, ale ty to instaluje až po výběru MCU.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host