Das dem Battery Management System (BMS) für meinen Rasenmäherakku beiliegende Display war leider die chinesische Version. Große Teile der Darstellungen waren deshalb zwar schön anzusehen, teilweise fast künstlerisch wertvoll, aber der Informationsgewinn auf diesen Seiten für mich eher gering bis nicht vorhanden.
Bei meiner Suche nach Informationen, wie ich das Display eventuell auf Englisch umschalten kann, bin ich auf die Seiten des Herstellers des BMS gestoßen. Ich habe mit dem Betreiber der Seite Kontakt aufgenommen und er hat mir freundlicherweise und vollkommen unkompliziert eine Datei mit der englischen Version der Display-Firmware geschickt.
Im Vorfeld hatte ich schon ermittelt, dass das Display von einem STM32F103C8 befeuert wird und dass ziemlich viele der in einem STM32 gemeinhin vorhandenen Schnittstellen bereits an den Rand der Platine geführt und passend beschriftet sind.
In drei Dokumenten von ST (Datenblatt für den STM32F103C8, AN2606 und AN3155) habe ich nachgelesen, wie die Programmierung eines STM32 prinzipiell vonstatten geht, das passende Tool STMFlashLoader Demo kann man bei ST kostenfrei herunterladen (gegen Registrierung).
Der STM32F103C8 kann ausschließlich über USART1 oder SWD programmiert werden. Da ich von früheren Arbeiten mit ESP-01 Boards einen FT232-Adapter mit 3,3 V Option besitze, habe ich mich spontan für den USART1 als Programmierzugang entschieden.
Auf dem Board des Display ist diese Schnittstelle bereits auf einen vierpoligen Stecker, im Bild unten mit P5 bezeichnet, herausgeführt, der lediglich noch bestückt werden muss.
Der Pinabstand ist 1 mm. Solch winzige Stecker hat man normalerweise nicht in der Schublade liegen, ich musste diese Winzlinge allerdings bereits bei einem älteren Projekt einsetzen und hatte noch den einen oder anderen Streifen Buchsen und Stecker übrig.
Zur Verbindung des USB-Seriell-Adapters mit dem Display habe ich ein kurzes Kabel mit 4 Adern gelötet, VCC, GND, Rx und Tx. Rx und Tx des Display werden überkreuz mit den Signalen des Adapters verbunden - Rx an Tx, Tx an Rx.
Damit sich der STM32 in den Bootloader begibt, muss der Pin Boot0 vor dem Anlegen der Betriebsspannung auf “1” (VCC, 3,3 V) gelegt werden. In den Unterlagen zur Programmierung per Bootloader ist noch erwähnt, dass Boot1 gleichzeitig auf “0” zu legen ist. Boot1 ist allerdings beim STM32F103 im vorliegenden 48-poligen LQFP -Gehäuse nicht ausgewiesen, ich habe diese Angabe vorerst also einfach ignoriert. Als zusätzliche Hardwareänderung muss jeweils ein PullUp von 100 kΩ an die Anschlüsse Tx und Rx des STM32 geschaltet werden.
Diese Änderungen habe ich fest eingebaut, Boot0 kann dabei über einen Jumper auf VCC gezogen werden. Ich habe zur Sicherheit einen 100 Ω Serienwiderstand vorgesehen, der kleine Klecks am linken Anschluss des Jumper-Steckers. Das Signal Boot0 liegt am rechten Ende von R9.
Die beiden Kommunikations-Signale Rx und Tx des STM32 liegen jeweils auf R28 und R29. Hier habe ich die PullUps fliegend an einem Ende angelötet, das andere Ende geht über einen Draht nach VCC, das am linken Ende von C3 zu finden ist.
Für die Widerstände habe ich SMD-Typen verwendet, das ist aber kein Muss, bedrahtete Varianten funktionieren genauso, Platz ist ausreichend vorhanden.
Die Versorgungsspannung VCC vom Stecker des UART1-Port wird im Übrigen nicht an den STM32 weitergeleitet, das musste ich mit einem zusätzlichen Draht - im Bild unten der mit den roten Micro-Klipsen - bewerkstelligen. Der Klips auf der Platine geht an den aufgelöteten Draht, der auf der Konverterseite an den roten Draht (VCC 3,3V) - siehe Markierungen in Gelb in der vergrößerten Darstellung.
(Click auf das Bild für größere Darstellung)
Achtung, hier ist wichtig, einen USB-Seriell-Umsetzer zu verwenden, dessen Signalpegel auf 3,3 V eingestellt werden kann. VCC ist in diesem Fall ebenfalls 3,3 V, kann also problemlos für die Versorgung des STM32 während der Programmierung verwendet werden. Das restliche Board des Display wurde für den Programmiervorgang nicht mit Spannung versorgt.
Solche USB-Seriell-Adapter sind im Netz zu finden (z.B. bei einem bekannten Internet-Kaufhaus mit e suchen nach “usb ttl ftdi” - darauf achten, dass der Adapter die Möglichkeit bietet, 3,3 V Pegel an den IOs einzustellen).
So vorbereitet wird der USB-Seriell-Konverter an den Rechner angeschlossen, auf dem bereits das Programmiertool STMFlashLoader Demo von ST installiert ist.
Die Bedienung des Tools ist ziemlich geradlinig, ich möchte deshalb hier nicht näher darauf eingehen. Wer sich einlesen möchte kann sich die ausführliche Beschreibung von Oliver Kuhlemann auf Cool-Web.de anschauen.
Ich habe vor dem Aufspielen der englischen Firmware noch schnell die Original-Firmware gesichert. Das Tool speichert den Code defaultmäßig im Motorola Format mit der Dateiendung *.s19. Die englische Firmware liegt mir als *.hex Datei vor, dieser Typ kann im Tool ebenfalls ausgewählt werden, der Download auf die Hardware funktionierte problemlos.
Mein Display stellt jetzt alle Seiten in englischer Sprache dar, wobei an einigen Stellen einzelne Zeichen falsch positioniert werden, der Sinn ist aber trotzdem leicht zu erkennen, kein Vergleich mit den chinesischen Zeichen vorher ;-)
Ich habe mit Shawn Xiao vereinbart, dass ich die Binary-Datei mit der englischen Firmware Interessenten zur Verfügung stellen darf. Bei Bedarf also bitte einfach mit mir Kontakt aufnehmen.