Getting started with STM32 - STM32F103C8T6 - blue pill

Ked som sa pozeral po altrenative k arduino doskam zaujali ma dosky s STM32 mikroprocesormi. Konkretne STM32 Minimum system development board, niekde oznacovana aku Blue pill, ktora za cenu priblizne 1.5€ ponuka velmi slusne vlastnosti. Za tu cenu som ani nevahal a objednal dva kusy na testovanie
0. Vlastnosti
Srdcom dosky je mikroprocesor STM32F103C8T6, k nemu je pridanych niekolko diskretnych suciastok, 3.3V stabilizator, mikro USB konektor, tlacidlo reset, dva jumpre, dve LEDky (jedna signalizuje napajanie, druha je programovatelna).
STM32F103xxx - Medium-density performance line ARM®-based 32-bit MCU with 64
or 128 KB Flash, USB, CAN, 7 timers, 2 ADCs, 9 com. interfaces
ARM® 32-bit Cortex®-M3 CPU Core
- 72 MHz maximum frequency, 1.25 DMIPS/MHz (Dhrystone 2.1)
- Single-cycle multiplication and hardware division
- 2.0 to 3.6 V application supply and I/Os
- VBAT supply for RTC and backup registers
Memories - 64 or 128 Kbytes of Flash memory - 20 Kbytes of SRAM
2 x 12-bit, 1 µs A/D converters (up to 16
channels) - Conversion range: 0 to 3.6 V
DMA - 7-channel DMA controller - Peripherals supported: timers, ADC, SPIs, I 2Cs and USARTs
Up to 80 fast I/O ports - 26/37/51/80 I/Os, all mappable on 16 external interrupt vectors and almost all 5 V-tolerant
Debug mode - Serial wire debug (SWD) & JTAG interfaces
7 timers - Three 16-bit timers, each with up to 4 IC/OC/PWM or pulse counter and quadrature (incremental) encoder input - 16-bit, motor control PWM timer with deadtime generation and emergency stop - 2 watchdog timers (Independent and Window) - SysTick timer 24-bit downcounter
Up to 9 communication interfaces - Up to 2 x I2C interfaces (SMBus/PMBus) - Up to 3 USARTs (ISO 7816 interface, LIN, IrDA capability, modem control) - Up to 2 SPIs (18 Mbit/s) - CAN interface (2.0B Active) - USB 2.0 full-speed interface
1. Prvy kontakt
Dosky som objednaval z Ciny, takze dorucenie zabralo tak 2-3 tyzdne. Ako byva zvykom dosky prisli zabalena v antzistatickom saciku spolu s nenapajkovanymi pinmi. Vizualne vyzeraju velmi pekne vyrobene, bez nejakych nedostatkov, zvlast ked berieme do uvahy cenu.

Po pripojeni k USB sa rozsvieti napajacia dioda a a dioda na pine PC13 blika - takze doska je funkcna :)

Co ma vsak zarazli bolo ze PC nezaregistroval ziadne pripojene USB zariadenie. Po chvilke hladania som nasiel na nete informaciu ze USB standard vyzaduje pullup rezistor na D+ s hodnotou 1k5. Tieto dosky maju vsak tento rezistor 10k(pripadne 4k7), na niektorych pocitacoch to moze postacovat ale vecsinou nie.
Takze ako prvy krok som rezistor vymenil, na doske je oznaceny ako R10. Nemal som prave poruke SMD 1k5 tak som pouzil 3k3 a fungoval. Tento rezistor je vlastne pripojeny medzi PA12 a 3.3V, takze ak sa neda vamenit smd rezistor staci prepojit tieto piny rezistorom takej hodnoty aby to v paralelnom zapojeni s 10k dalo vyslednych 1k5.

Po tejto uprave je detekovane pripojenei usb ale rozpoznavanie zariadenia zlyha na chybe - Device Descriptor Request Failed - error 43.
Je to sposobene tym ze nahraty program v zariadeny neobsluhuje USB rozhranie, neposkytne udaje na identifikaciu a zariadenie nie je mozne rozpoznat.
Takze v tomoto momente nie je mozne nahrat novy program pomocou USB rozhrania bez potreby programatora.
Nahravanie programu
Po miernom sklamani z absencie oficialneho USB bootloaderu som sa dal do hladania moznosti.
1. USB DFU Protokol
Niektore STM32 mikroprocesory maju zabudovanu podporuj pre USB DFU protokol, ktory umoznuje nahrat priamo cez usb pripojenie. Avsak podporujuce zariadenia su tieto (bohuzial to nezahrna STM32F103xxx):
STM32F0 Series:(STM32F04xxx, STM32F07xxx) STM32F1 Series: (STM32F105xx, STM32F107xx ) STM32F2 Series STM32F3 Series: (STM32F301xx, STM32F302xx, STM32F303xB, STM32F303xC, STM32F303xD, STM32F303xE, STM32F373xx) STM32F4 Series: (STM32F401xx, STM32F405xx, STM32F407xx, STM32F411xx, STM32F412xx, STM32F415xx, STM32F417xx, STM32F427xx, STM32F429xx, STM32F437xx, STM32F439xx, STM32F446xx, STM32F469xx, STM32F479xx) STM32F7 Series: (STM32F722xx, STM32F723xx, STM32F732xx, STM32F733xx, STM32F745xx, STM32F746xx, STM32F756xx, STM32F765xx, STM32F767xx, STM32F769xx, STM32F777xx, STM32F779xx) STM32L0 Series: (STM32L07xxx, STM32L08xxx) STM32L1 Series: (STM32L1xxxC, STM32L1xxxD, STM32L1xxxE) STM32L4 Series: (STM32L431xx, STM32L432xx, STM32L433xx, STM32L442xx, STM32L443xx, STM32L471xx, STM32L475xx, STM32L476xx, STM32L486xx, STM32L496xx, STM32L4A6)
viac informacii o tomto je na stranke www.st.com kde je aj aplikácia na stiahnutie, v tomto pripade nam to ale nepomoze tak sa tym dalej nezaoberam.
2. ST-Link a ST-Link/V2 programator
externy programator s moznostou debugovania. Serial wire debug (SWD) & JTAG interfaces. Asi by to bola najidealnejsia volba, podporuje in-circuit programovanie a debugovanie. Klony sa predavaju za nizku cenu, od 2€.
3. Custom bootloader
Je dostupnych niekolko bootloaderov s podporou USB, SD karty a ine. Najznamejsi je STM32Duino bootloader. Pomocou neho je mozne nahravat program priamo cez USB s Arduino IDE. Bootloader vsak treba najskor nahrat do STM32 inym sposobom.
4. Default USART bootloader
Vsetky STM32 maju k dispozicii USART bootloader. Pre nahretie programu potom staci iba pripojit USB to serial prevodnik a spustit program ( napr STM32 Flash loader demonstrator). Na prve odskusanie som si zvolil tento sposob.
Pripojenie USBtoSerial pre nahratie programu
Pripojenie je celkom jednoduche staci pripojit RX a TX pin s prevodniku na pin A9 a A10 na STM32 a napajanie, bud z prevodniku alebo externe. Pri pouziti externeho napajanie nepripojima napajanie VCC s prevodniku.
Pin A9 a A10 su 5V tolerantne, takze mozme pripojit aj prevodnik s 5V logikou.
pripojime RXD-> A9 TXD-> A10 +5V -> +5V GND-> GND


Stiahneme a nainstalujeme STM32 Flash loader.
Pred pripojenim nastavime jumper BOOT0 na 1 a BOOT1 na 0 (vrchny obrazok este nema nastaveny jumper). Spustime aplikaciu Demonstrator GUI. Pred spustenim je potreba mat uz pripojeny prevodik, inak nerozpozna com port. Na uvodnej karte vyberieme COM port, ostatne satavenia som nemenil. Ak je vsetko spravne na dalsej karte zobrazi velkost flash pamete. Na dalsej karte vidime identifikaciu zariadenia a jednotlive stranky pamete. Dalsia karta nam dava na vyber co chceme robit. Mozeme pamet vymazat, nahrat novy obsah, ulozit obsah do suboru, nastavit ochranu proti zapisovaniu a nejake dalse nastavenia.
Pretoze nemame zatial ziadny program na otestovanie komunikacie mozem vymazat obsah alebo ho stiahnut do suboru. Komunikacia vyzera uspesna, zapisal som cely obsah pamete do suboru test_backup.s19
Dalsia aplikacia od ST cez ktor mozme nahravat, vymazavat, stahovat programa nastavenia je STM32CubeProg. Podporuje nahravanie cez UART, USB a ST-Link. Staci vybrat rozhranie a ostatne je intuitivne.
Vytvorenie programu
kedze uz mame sposob ako nahrat program, teraz to che este nejaky vytvorit.
Budeme na to potrebovat nejake vyvojove prostredie (IDE) . Na strankach ST jsu odkazy na niekolko vyvojovych prostredi ktore podporuju STM32.
Ja som si vybral System Workbench toolchain - SW4STM32. Je free, ma plnu podporu vsetkych STM32 mikroprocesorov a vyvojovych dosiek a je zalozene na Eclipse, ktore aspon trocha poznam. link: https://www.openstm32.org/HomePage
Na stranke su navody ako to nainstalovat a rozbehat.