STM32F103C8T6 STM32 Billig Board
Übersicht
Bei Aliexpress, Ebay & Co gibt es bereits ab 2 EUR (1.84€ [19.07.2017]) ein minimalistisches STM32-Board. Auf Ebay im Suchfeld Suchfeld einfach "STM32F103C8T6" eingeben.
Eckdaten:
- STM32F103C8T6
- 64k Flash (viele C8 besitzen in wirklichkeit 128k Flash), 20k RAM
- Micro-USB, ISP Header (SWDIO)
- 8MHz System-Quarz, 32.768kHz RTC Quarz
- BOOT0/BOOT1 Jumper
- RESET Button
- Power LED, LED an GPIO
Dieses Board ist unter anderem auch unter dem Namen Blue Pill bekannt. Zwei ähnliche Boards nennen sich "Black Pill" und "Red Pill".
Schaltplan
Es scheint verschiedene Versionen dieses Boards zu geben und das sorgt für Verwirrung. Bei der geringen Anzahl an Bauteilen sollte man genau mit Fotos und Schaltplan vergleichen. Am besten jeden Bauteilwert verifizieren.
Der Hersteller scheint eine Website unter der Domain vcc-gnd.com gehabt zu haben, dort gab es einen Schaltplan, der noch im Netz umgeht (Datei:Vcc-gnd.com-blue-pill-schematic-stm32f103c8t6.pdf).
Der User Eddy Current (chrisi) hat dafür in diesem Thread einen Schaltplan gepostet (Datei:STM32 Min System Dev Board.pdf).
Inbetriebnahme und Test
Die onboard-LED an PC13 kann man für erste Lebenszeichen verwendet werden. Hier gibt es ein kleines blinky-Programm https://github.com/spacerace/stm32f103c8t6-blinky im Quellcode und stm32f103c8t6_blinky.bin zum direkten schreiben.
128k Flash
Wie gehe ich vor um zu testen ob mein STM32F103C8T6 Mikrocontroller wirklich 128kByte Flash besitzt?
Bei der Vorgehensweise hier wird angenommen dass:
- OpenOCD installiert worden ist (unter Windows lautet der Pfad etwas anders) - ein "ST-Link V2" Programmieradapter verwendet wird - das STM32 Board richtig mit dem "ST-Link V2" verbunden wurde (4 Leitungen, 3.3V, GND, SWDIO, SWCLK)
Die Schritte:
0. // Den verfügbaren Flash-Bereich im OpenOCD Script für den STM32F103 ändern :
In der Datei "/usr/share/openocd/scripts/target/stm32f1x.cfg"
Die Zeile mit einer Raute auskommentieren:
#flash bank $_FLASHNAME stm32f1x 0x08000000 0 0 0 $_TARGETNAME
und durch diese hier ersetzen:
flash bank $_FLASHNAME stm32f1x 0 0x20000 0 0 $_TARGETNAME
(habe auch noch "adapter_khz 1000" auf "adapter_khz 950" gesetzt, weil der mini ST-Link V2 eh nur diese Option hat)
1. // Verbindung zum St-Link V2 (im 1. Terminal-Fenster) aufbauen :
openocd -f board/board.cfg
2. // Die Debug-Verbindung (im 2. Terminal-Fenster) öffnen :
telnet localhost 4444
Ausgabe:
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Open On-Chip Debugger
>
[Jetzt werden in die gerade geöffnete Telnet-Konsole einige Befehle eingegeben.]
3. // Den Debuger anhalten :
reset halt
Ausgabe:
target state: halted
target halted due to debug-request, current mode: Thread
xPSR: 0x01000000 pc: 0x080036a0 msp: 0x20005000
4. // Die verfügbare Flash-Größe abfragen :
flash probe 0
Ausgabe:
device id = 0x20036410
ignoring flash probed value, using configured bank size
flash size = 128kbytes
flash 'stm32f1x' found at 0x08000000
5. // Bild (Bio-Hazard-Zeichen) in den Flash schreiben :
(das 131072 byte große Bild [mit einem .bin als Dateiendung] liegt hier einfach direkt im Home-Verzeichnis des Nutzers)
flash write_image erase bh20k.bin 0x08000000
Ausgabe:
auto erase enabled
target state: halted
target halted due to breakpoint, current mode: Thread
xPSR: 0x61000000 pc: 0x2000003a msp: 0x20005000
wrote 131072 bytes from file bh20k.bin in 4.054750s (31.568 KiB/s)
6. // Bild aus dem Flash wieder zurück lesen :
dump_image dump.bin 0x08000000 0x1ffff
Ausgabe:
dumped 131071 bytes in 2.470239s (51.816 KiB/s)
7. // Beenden :
exit
Ausgabe:
Connection closed by foreign host.
8. // OpenOCD mit STRG+C beenden
Jetzt wird die ausgelesene Datei "dump.bin" zu "dump.bin.bmp" umbenannt weil das eigentlich nur eine Bitmap-Datei ist. Man vergleicht dieses Bild mit der "bh20k.bin.bmp", welche zuvor in den Flash geschrieben wurde. Wenn der obere halbe Teil des Bildes nicht vorhanden ist (weißer Bereich), dann hat der Chip nur 64kByte Flash.
Die verwendete board.cfg sieht so aus:
source [find interface/stlink-v2.cfg]
set WORKAREASIZE 0x4000
# Disable debug when in low power modes
set ENABLE_LOW_POWER 0
# Stop Watchdog counters when halt
set STOP_WATCHDOG 0
# use software reset
reset_config none separate
set CONNECT_UNDER_RESET 0
source [find target/stm32f1x.cfg]
Das komprimierte Bitmap-Testbild "BioHazard-Symbol" mit der .bin - Dateiendung:
In System Programming/Programmer
Durch den SWDIO Header lässt sich das Board sehr einfach per ST-Link und kompatiblem Programmern schreiben/lesen. Mit einer passenden Firmware lässt sich dieses Board auch ST-LinkV2 verwenden.
USB PullUp Problem
R10 ist auf vielen Boards mit 10k bestückt worden und sollte aber ein 1k5 Widerstand sein. Dadurch muss nach jedem Reset das Board ab- und wieder angesteckt werden. Man hat nun zwei Möglichkeiten, man wechselt R10 aus oder schliesst einen 1k8 parallel zu R10 an. Nun hat man wieder die Möglichkeit das an-/abstecken per Software vorzugeben.