STM32F103C8T6 STM32 Billig Board

Wechseln zu: Navigation, Suche

Ü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.

STM32F103C8T6 STM32 Board.jpg

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:

Das Vergleichsbild wie es aussehen müsste wenn 128kByte verfügbar sind
Das Vergleichsbild wie es aussehen müsste wenn nur 64kByte verfügbar sind


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.