BluePill STM32F103C8T6 jako Arduino - 長征
Napsal: 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 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!
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!