Geehy APM32F103VC-Mini Entwicklungsboard
Test und Einrichtung unter Arduino IDE 2.0
In meinem letzten Artikel zum Geehy APM32F103VC-Mini-Board ging es ja erstmal nur um das Auspacken und den allerersten Eindruck des Board, des APM32 PROG und des Geehy-Link. Außerdem ging es um eine Sichtung der technischen Spezifikationen und wo sich das APM32-Mini-Entwicklungsboard einordnet unter den mir schon bekannten Boards.Mit den vielen IO-Pins könnte das Board eine Alternative zum Arduino Mega sein, und mehr Geschwindigkeit und Speicher zum gleichen Preis wie ein Mega Clone bieten.
Welche Entwicklungsumgebung?
Nun stellt sich natürlich die Frage der Entwicklungsumgebung. Am schönsten wäre ja, wenn man die Arduino IDE, die wir alle kennen und schätzen oder vielleicht auch Visual Studio Code benutzen könnte.Geehy gibt als Entwicklungsumgebungs-Empfehlung Keil von arm an, mit dem ich mich allerdings nicht weiter auskenne. Auf der Website von Keil werden auch die MCUs von Geehy aufgeführt, allerdings nur die APM32- E1, F0 und F4 Serie. Die F1 Serie fehlt. "APM" im Namen lässt aber darauf schließen, dass Geehy die Nachfolgefirma (oder vielleicht eine Partnerfirma) von APEXMIC ist, und dort ist die F1 Serie mit dem F103 in allen möglichen Varianten, auch APM32F103VC (der Chip auf dem Mini-Board, um den es hier geht) und der APM32F103C8 (der Chip, der sich auf mancher Blue Pill und Black Pill aus China befindet) vertreten.
Arm Keil ist sicher eine der professionellsten Entwicklungsumgebungen für Arm-Chips, wie der APM32 auch einer ist. Aber eigentlich habe ich derzeit nicht so richtig Lust und Zeit, mich da reinzufuchsen. Ich habe schon so viel an Code in Arduino IDE und VS Code. Das alles zu portieren wäre unter Umständen ein ziemlicher Aufwand. Auch wenn ich glaube, dass man mit Keil auch das letzte bisschen aus den MCUs rausholen könnte und das Debugging zusammen mit dem Geehy Link sehr professioneller ist als das Serial.println einfügen in den Source-Code, wie wir es aus der Arduino IDE gewohnt sind. Momentan möchte ich aber versuchen bei der Arduino IDE oder Visual Studio Code mit Platform IO zu bleiben und meine Zeit eher in neue Projekte als in eine neue Entwicklungsumgebung zu stecken.
Mal schauen, vielleicht bekomme ich das Board ja unter der Arduino IDE 2.0 zum Laufen. Doch dazu später mehr.
Rechtliche Situation
Eindeutig ist, das arm mit Keil die APM32-Chips unterstützen. Der Geehy Link hatte mich ja ein bisschen an den ST-Link erinnert, aber es ist sicher nicht verboten, die Farbe weiß als Gehäusefarbe zu wählen und die Größe des Geräts folgt dem Inhalt (Platine etc.) und der JTAG-Port auf der Oberseite ist Standard.Ich habe natürlich versucht, den Geehy-Link als ST-Link auszugeben, aber das funktioniert nicht. Der Geehy-Link wird nicht als ST-Link erkannt und kann schon deswegen keine "Raubkopie" sein.
Wie ich überhaupt auf den Gedanken mit der "Raubkopie" komme? Naja, eigentlich nicht ich, sondern ein paar Leute im Internet. Denen ist nämlich aufgefallen, dass auf manchen Blue Pills keine Original-STM32F103C8T6-Chips von STM waren, sondern ähnliche von CKS, GD, WCH, und eben auch APM. (1) (2) (6)
In Pinanzahl und Größe waren die Clone-Chips genau gleich und auch der Rest der Blue Pill-Platine war genau gleich. Wenn einfach nur der Chip ersetzt werden muss und alles wie gewohnt läuft, dann lässt das natürlich vermuten, dass es sich beim Chip um eine 1:1-Kopie handelt. Das folgt der Annahme: "Pins gleich, Inneres gleich".
Und auch ich habe schon meine Erfahrung mit einer Blue Pill mit Conterfeit-Chip gemacht. Der war allerdings mit STM32-Aufdruck. Ich weiß bis heute nicht, ob das nur ein echter, fehlerhafter STM32 war, oder ein echter, guter STM32 mit Fehler auf dem Blue Pill-Board oder ein gefälschter Chip, der dafür verantwortlich war, das die VBAT-Unterstützung für die Real Time Clock nicht funktionierte. Aber das nur nebenher.
Zurück zu den Clonen bzw. Alternativ-Chips aus China: Ein Schuft, der böses denkt, könnte jetzt annehmen, das wären alles Raubkopien und da hätte jemand 1:1 einen Chip kopiert. Das wäre natürlich illegal.
Der Sache ist Richi's Lab nachgegangen und hat einem APM32F103C8T6 unter die Haube und damit aufs Die, also auf die blanke Chipoberfläche geguckt. Dort lässt sich erkennen, dass das Die von APM32 anders aussieht als das vom STM32, also keine 1:1 Kopie ist.
Ich bin jetzt kein Rechtsanwalt und gebe hier auch keine rechtliche Beratung, aber für mich sieht das rechtlich okay aus. Wenn ich einen eigenen Chip designe, der die gleiche oder ähnliche Funktionalität hat wie ein bereits vorhandener und da gibt es kein Patent (mehr) drauf, dann darf ich den auch herstellen und verkaufen, solange ich es nicht 1:1 kopiere und es selbst entwickle. Ich darf mich halt nicht bei dem Original bedienen und kopieren, sondern muss die Entwicklung selbst leisten. Naja, oder mich mit dem Original-Hersteller über Lizenzgebühren einigen.
Außerdem: Was sollte uns Endanwender und Hobbyelektroniker interessieren, wenn STM die Clone-Hersteller wegen Patent, Lizenz oder Copyright-Vergehen verklagt? Vielleicht hat APM ja auch bei STM32 völlig legal eine Lizenz gekauft? Es ist auch nicht unsere Aufgabe, das zu überprüfen. Da müsste STM dann schon selbst aktiv werden. Was uns passieren kann, ist, dass die Herstellung (ich glaube eher nicht) untersagt werden könnte, wenn was illegales dran wäre und wir dann wieder Original-STM-Chips kaufen müssten. Es kann aber auch anders herum gehen: das die original Chips aufgrund irgendwelche Ereignisse knapp werden, wie es tatsächlich während der Chip Crisis in der Corona-Zeit der Fall war. Orignal STM32-Chips waren nur noch zu Mondpreisen, wenn überhaupt zu bekommen. Schön, wenn es in solchen Fällen eine Alternative gibt, so dass die Produktion der Board-Hersteller nicht stillstehen muss.
Was für Original-STM-Chips spricht, ist natürlich auch, dass die 100% STM-kompatibel sind, die sind ja schließlich von STM. Hoffentlich - hier gibt es scheinbar Fälschungen, darum besser nur bei seriösen Distributoren kaufen. Und man ist auf der legalen Seite, wenn man STM-Tools einsetzt (die haben nocheinmal eine eigene Entwicklungsumgebung, die STM32 Cube IDE). In den Lizenzvereinbarungen bei der Installation der STM-Software (die nie einer liest) steht mit Sicherheit drin, dass man damit natürlich nur STM32 Hardware nutzen darf. Moralisch und volkswirtschaftlich muss man auch sagen, dass die Entwicklung von Chips und IDEs viel Zeit und damit Geld verschlingt. Und ganz allgemein gesprochen, das gilt für alle hochwertigen Marken: wenn jeder nur billige Kopien kauft, und die Marke nichts mehr verkaufen kann, dann wird es bald niemanden mehr geben, der Neues entwickelt. Wobei ich APM32-Chips jetzt bitte nicht als "billige Kopie" missverstanden wissen will, darum ja auch: "ganz allgemein gesagt".
APM-Chips mit APM-Tools (oder freien Tools und IDEs) einzusetzen ist sicherlich überhaupt kein Problem. Da es aber eben keine 1:1 Die-"Raubkopien" sind, kann man sich aber nicht darauf verlassen, dass diese 100%ig kompatibel zu STM-MCUs sind. Vielleicht sind es auch nur 99.xx%.
Kompatibilität
Wobei wir bei der Frage der Kompatibilität sind. Wie schon oben erwähnt, hatte ich schon einmal ein Problem mit einer vermeintlichen Fälschung eines STM32-Chips auf einer Blue Pill im Zusammenhang mit VBat. Nehmen wir man an, das war eine Clone-MCU, die widerrechtlich mit dem STM-Logo bedruckt wurde. Hier hätte sich die Inkompatibilität erst spät herausgestellt, als ich etwas ganz speziellen damit machen wollte.Alle Testfälle, die möglich sind, abzuklappern und auszutesten, ob eine MCU 100% kompatibel ist, wäre eine sehr sehr zeitaufwändige Angelegenheit. Ich spreche hier von Mann-Monaten, wenn nicht Mann-Jahren. Ich werde einfach mal blauäugig davon ausgehen, dass das Mini-Board soweit kompatibel ist. Die Grundfunktionen wird es ja wohl auf jeden Fall beherrschen. Das heißt, es wird auf jeden Fall von Nutzen für mich sein.
Und ich habe auch keine Bedenken, das alle IO-Ports funktionieren und das ist ja, worauf es mir ankommt: ein Board zu haben, wenn ich mal echt viele GPIOs brauche. Wenn dann ein Timer oder was anderes intern nicht 100%ig kompatibel ist, dann findet sich vielleicht ein Workaround. Vielleicht läuft aber auch alles perfekt, weil ich auf die imaginäre 0.xx% Inkompatiblität-Funktion nie stoßen werde. Das kann nur die Zeit zeigen.
Läuft das Board unter der Arduino IDE?
Es gibt ja die STM32duino genannte Erweiterung für die Arduino IDE, mit denen man die Arduino Libraries auch für den STM32 nutzen kann. Ich nutze zudem die Erweiterungen von Roger Clark. Die habe ich mal gebraucht, um selbst eine Erweiterung für die Real Time Clock auf einer Blue Pill zu schreiben, damit die supergenau geht. Und ich habe gute Erfahrungen mit der Erweiterung gemacht und bin dabei geblieben, auch damit mein bereits geschriebener Source-Code weiterverwendbar bleibt.Wie man die Arduino IDE installiert, habe ich in meinem Artikel Arduino - Ersteinrichtung beschrieben. Wenn ihr die habt, braucht ihr noch STM32duino oben drauf. Wie ihr das macht, steht in meinem Artikel STM32 F103 - Ersteinrichtung. Da geht es aber um die Blue Pill mit dem STM32F103C8T6. Der APMF103VC auf dem Mini-Board ist aber gar nicht so groß anders, sagen wir mal, er hat von allem ein wenig mehr: mehr GPIO-Ports, mehr Takt, mehr Flash, mehr SRAM.
Habt ihr STM32duino installiert, dann stehen euch außer der F103C8T6 auch die F103VC Variante zur Verfügung. Diese wählen wir einfach in der Arduino IDE unter Werkzeuge aus:

Der APM Chip kann zwar 96 MHz statt nur 72, aber hoffen wir mal, dass das kompatibel sein wird. Versuch macht klug. Also los...
Besonderheiten des Boards
Bevor wir nun unseren ersten Sketch für das APM32-Mini-Board schreiben, müssen uns erst einmal ein bisschen mit den Besonderheiten des Boards vertraut machen.
Das "User Manual" zum Mini-Board sagt auch nicht viel mehr aus, als die Rückseite der Verkaufsverpackung. Wenn man Näheres wissen will, dann muss man sich durch das User Manual APM32F103xCxDxE Arm® Cortex® -M3 core-based 32-bit MCU wühlen, ein englischsprachiges Dokument mit 462 Seiten.
Ich schätze, da steht dann so ziemlich alles zum MCU-Chip drin, aber evl. nicht alles zum Entwicklungsboard.

Doch wozu hat man ein Multimeter? So sollte doch leicht herauszufinden sein, wie die
- beiden LEDs LED2 und LED3
- beiden Taster KEY1 und KEY2
- die 9 polige Sub-D-Buchse für die serielle RS232 Schnittstelle
Nach ein paar Messungen steht fest (dankenswerterweise sind die Pins ja gut beschriftet), was zu welchem Pin führt und ich definiere ein paar Einstellungen per #define-Statements dazu, um sie immer wieder in meinem Code verwenden zu können:
// APM32F103VC-Mini-Board spezifische Einstellungen
#define KEY_1 PA1
#define KEY_2 PA0
#define LED_2 PE6
#define LED_3 PE5
#define USART1_TX PA9
#define USART1_RX PA10
#define USART2_TX PA2
#define USART2_RX PA3
#define USART3_TX PB10
#define USART3_RX PB11
Doch stellt sich die Frage: Wie hochladen?
Firmware-Upload auf das Mini-Board - nur wie?
Verbinde ich den USB-B-Port des Mini-Boards mit meinem PC bekomme ich nur eine Fehlermeldung "unbekanntes Gerät". Wahrscheinlich müsste ich hier erst einmal etwas programmieren, damit der USB-Port in irgendeiner Art und Weise kommuniziert, sozusagen einen modifizierten BootLoader.Der mir zur Verfügung gestellte Geehy-Link habe ich noch nicht zum Laufen gebracht. Auf jeden Fall ist das kein ST-Link-kompatibles Gerät. Die Windows-Treiber wurden aber alle installiert und ich schätze der Geehy-Link wird unter Keil als Debugger glänzen können. Zum Firmware flashen taugt er mir derzeit allerdings nicht.
Aber da wäre ja noch das andere Gerät, der APM32 PROG. Mit dem kann man ja programmieren, allerdings nur ganze .bin oder .hex-Files, also das komplette Firmware-File, wie es beim Kompilieren in der Arduino IDE erzeugt wird. In der APM32 Prog Software kann dann das .hex-File geladen werden und direkt auf die APM32-MCU geflasht werden. Oder - besonderes Gimmick - in den Speicher des APM32 PROG geladen werden und von dort aus, auch ohne PC, geflasht werden. Dabei wird das Firmware-Image im PROG gehalten, so dass das Flashen auch nur mit einer Powerbank funktionieren würde. Ideal für Massenproduktionen, um einen Chip nach dem anderen zu flashen, nun gut, einen ZIF-Adapter bräuchte es auch noch, oder ein JTAG/SWD-Port auf jeder Platine.
Aber erst in der Arduino IDE zu kompilieren und dann das .hex-File zu kopieren und dann ein weiteres Tool zum Flashen benutzen, das ginge schon, aber man ist ja schon einen gewissen Komfort gewohnt, eben, dass das nahtlos und in derselben Umgebung geht.
Bleibt noch der Upload via SWD oder JTAG. Das Mini-Board soll ja beide Protokolle unterstützen. Mit JTAG habe ich noch keine Erfahrungen, aber SWD wäre doch eine Option, wenn das funktionieren würde. Wie schon erwähnt ist der Geehy-Link nicht kompatibel mit dem ST-Link. Aber ich habe ja noch den ST-Link-Clone, mit dem ich immer meine Blue Pills geflasht habe.
Was ein ST-Link ist und wie man ihn benutzt, erkläre ich in meinem Artikel ST-Link statt Serial-Adapter zum Flashen des STM32 benutzen. Wer das Geld übrig hat, kauft sich natürlich einen Original-ST-Link und unterstützt damit die Entwickler. Und muss sich, nebenbei erwähnt, nicht mit falsch gelaserten Beschriftungen herumschlagen (siehe Artikel).

Das Mini-Board hat aber keinen 4-poligen SWD-Stecker, wie die BluePill. Aber es hat einen scheinbar kombinierten JTAG-Stecker, der auch SWD enthält. Das ist dieser 2x10-Header oben rechts auf dem Board
Und auf der Rückseite von der APM32 PROG ist das Pinout der JTAG-Schnittstelle abgebildet. Die hier interessanten Pins sind SWDIO, SWCLK und vielleicht noch RESET. Und natürlich GND und 3.3V.
Jetzt muss ich nur noch meinen ST-Link-Clone, der ebenfalls über die Pins SWDIO, SWCLK und Reset (und GND/3.3V) verfügt, entsprechend verbinden. Ich könnte die vier Kabel (oder fünf mit Reset) eigentlich einfach in den JTAG-Stecker auf dem Mini-Board stecken. Das ist mir aber irgenwie zu windig.

Und dem APM32 PROG lag ja ein kleines Adapter-Platinchen bei. Das macht mir die Verkabelung einfacher: In den schwarzen Pfostenstecker kommt das JTAG-Kabel und das andere Ende in das Mini-Board. Der breite weiße Pfostenstecker an der gegenüberliegenden Seite bleibt frei. Und interessiert der 5 polige JST-Stecker in der Mitte. Hier ist der SWD-Port.
Auf der Rückseite ist er beschriftet. Die Verkabelung ist dann folgendermaßen vorzunehmen:
SWD-Adapter ST-Link Kabelfarbe
Vtref 3.3V rot
GND GND schwarz
J1MS SWDIO braun
J1CK SWCLK weiß
NRST Reset (optional) grau
Ich habe mir noch einen zweiten ST-Link-Clone bestellt, damit ich nicht immer umstecken muss, wenn ich mal wieder eine Blue Pill flashen muss. Nicht dass ich mal aus dummem Zufall die Kabel falsch stecke.So konfiguriert gelingt es mir, einen ganz einfachen Sketch hochzuladen, der die LEDs blinken lässt. Upload funktioniert also direkt aus der Arduino IDE heraus. Und Kompatiblität zu dem rudimentären Sketch mit der STM32duino-Library ist auch gegeben. Sehr schön.
Und der Serial-Port?
Da wir unter der Arduino-IDE nicht so ein professionelles Debugging haben wie mit arm Keil und dem Geehy-Link, sondern dort eigentlich nur Serial.print-Statements benutzen, muss irgendwie auch der Serial Port als Serial-Objekt in der Arduino benutzbar werden.Der Port dazu ist oben links der 9-polige Sub-D-Port, den man für Modems oder auch für digitale Joysticks kennt - den kenne ich schon vom Atari VCS 2600 Ende der Siebziger her. Im Normalfall ist der 9-polige Port auf USART1 geschaltet, es sei denn, man hat an den Jumpern direkt darunter herumgespielt und ihn auf USART2 gesetzt.
Die entsprechenden Pins auf dem Board hatte ich ja schon herausgesucht: USART1_TX = PA9 und USART1_RX = PA10. Wobei RX für Receive = empfangen steht und TX für Transmit = senden. Vielleicht sollte ich noch erwähnen das TX (Sender) an RX (Empfänger) und umgekehrt angeschlossen werden muss. Denn lapidar gesagt, will der eine hören, was der andere sagt. Auch wenn man normalerweise gleichnamige Kabel miteinander verbindet, hier gilt: RX an TX und TX an RX!
Um eine serielle Verbindung herzustellen, hat man mehrere Möglichkeiten:
- Man nutzt einen FTDI-Adapter oder einen anderen Serial-Adapter und steckt die Jumper-Kabel dann direkt in PA9 und PA10
- Man nutzt den RS232 Port mit dem 9-poligen Port oben, auch dafür gibt es fertige RS232-Adapter für kleines Geld

Ich finde es schöner, die RS232-Buchse zu benutzen, das sind dann zwei Kabel weniger aber dem Board. Und macht die Sache übersichtlicher. Man muss allerdings dran denken, dann man PA9 und PA10 nicht mehr für andere Dinge verwenden kann (zumindest nicht gleichzeitig), wenn man serielle Ausgaben macht.
Das war auch meine erste Wahl, weil ich noch alte RS232-USB-Adapter aus Analog-Modem-Zeiten hatte. Aber selbst, wer keine hat, die sind für kleines Geld schnell aus China bestellt - plus Wartezeit, bis geliefert wird, aber bestellt ist schnell ;)
Den RS232-Adapter kann man dann direkt so in die 9polige Buchse am Mini-Board stecken und die andere Seite verbindet man am besten mit einem USB-Verlängerungskabel USB male zu USB female. So muss das Board nicht direkt vorm USB-Port stehen, sondern man kann es hin und herschieben.
Der RS232-USB-Adapter stellt einen neuen COM-Port unter Windows zur Verfügung (bei mir jetzt COM43). Den kann ich in der Arduino IDE als Port auswählen und dann sollte ich die Ausgaben, die vom APM32-Board kommen, im Serial Monitor in der Arduino IDE sehen können.
Damit hätte ich dann alles unter einem Hut: Programmieren, Flashen, Serielle Ausgabe: alles mit einem Programm, alles in der Arduino IDE.
Damit wären auch meine beiden USB-Front-Portn meines PCs belegt. Wer sich übrigens fragt, was die neongrünen Ränder um die Platinen sollen: Das sind selbst entworfene Bumper aus meinem 3D-Drucker, damit die Pins auf der Unterseite der Platine nicht auf der Schreibtischoberfläche herumkratzen und damit es mit der Rückseite keine Kurzschlüsse gibt.
Endlich: ein erster Test-Sketch
Nachdem nun alles zusammen ist, können wir uns nun endlich daran machen, einen eigenen Sketch zu schreiben, um das Board zumindest rudimentär auszutesten.Das Programm soll anfangs ein wenig zwischen LED2 (grün/gelb) und LED3 (rot) blinken, dann sollen die LEDs ausgehen und nur aufleuchten, wenn eine Taste auf dem Board gedrückt wird: KEY1 lässt LED2 leuchten, KEY2 lässt LED3 leuchten. Das soll uns für den Anfang erst einmal reichen.
Und hier ist der zugehörige Source-Code:
APM32F103VC.ino (klicken, um diesen Abschnitt aufzuklappen)
////////////////////////////////////////////////////////
// (C) 2023 by Oliver Kuhlemann //
// Bei Verwendung bitte ich mich über Namensnennung, //
// Quellenangabe und Verlinkung //
// Quelle: http://cool-web.de/arduino/ //
////////////////////////////////////////////////////////
// basiert auf den STM32-Libraries von Roger Clark
// https://github.com/rogerclarkmelbourne/Arduino_STM32/wiki/Installation
#include <Arduino.h>
// APM32F103VC-Mini-Board spezifische Einstellungen
#define KEY_1 PA1
#define KEY_2 PA0
#define LED_2 PE6
#define LED_3 PE5
#define USART1_TX PA9
#define USART1_RX PA10
#define USART2_TX PA2
#define USART2_RX PA3
#define USART3_TX PB10
#define USART3_RX PB11
// Serial1 ist automatisch da!
#define Serial Serial1 // damit ich wie gewohnt "Serial.xxx" schreiben kann
void setup() {
Serial.begin(115200);
delay (100);
Serial.println("Programm gestartet.");
pinMode(LED_2, OUTPUT);
pinMode(LED_3, OUTPUT);
pinMode(KEY_1, INPUT_PULLUP);
pinMode(KEY_1, INPUT_PULLUP);
}
void loop() {
// LED Blinky blinky
Serial.println("blinky blinky...");
for (int i=0; i < 10; i++) {
digitalWrite(LED_2, HIGH);
digitalWrite(LED_3, LOW);
delay(250);
digitalWrite(LED_2, LOW);
digitalWrite(LED_3, HIGH);
delay(250);
}
Serial.println("Drücke eine Taste, die entsprechende LED geht dann an...");
int k1Old = digitalRead(KEY_1);
int k2Old = digitalRead(KEY_2);
// dann auf Knopfdruck von KEY_1 und KEY_2 die LEDs entsprechend an bzw. aus
while (1) {
int k1 = digitalRead(KEY_1);
int k2 = digitalRead(KEY_2);
digitalWrite(LED_2, k1);
digitalWrite(LED_3, k2);
if (k1 != k1Old) Serial.println("Taste 1 gedrückt bzw. losgelassen");
if (k2 != k2Old) Serial.println("Taste 2 gedrückt bzw. losgelassen");
k1Old = k1;
k2Old = k2;
}
}
Wie gesagt, basieren meine STM32-Programme auf den Libraries von Roger Clark. Die müssten evtl. auch noch installiert werden. Der Link zur Installation und eine Anleitung findet sich unter dem Link oben im Source-Code.
Danach kommt die Definition der für das APM32F103VC-Mini-Board spezifischen Pins, wie ich ja bereits schon ausgemessen habe.
Ist das richtige Board (F103VC) gewählt, dann stimmen auch die Zuweisungen USART1_TX = PA9 und USART1_RX = PA10. Die sind bereits so in Rogers Library so gesetzt, so dass wir direkt mit Serial1 auf den USART1 Port zugreifen können und uns nicht mit HardwareSerial oder SoftwareSerial herumschlagen müssen.
Damit ich nicht jedesmal Serial1.println() schreiben muss, sondern Serial.println() schreiben darf, wie ich das so gewohnt bin, gibt es noch die Zeile #define Serial Serial1.
Zu Programmbegin (in setup) werden dann die Pin-Modes gesetzt und die erste Meldung über Serial ausgegeben. Dann wechselt die MCU in die loop-Schleife und blinkt anfangs ein paar mal zwischen den LEDs hin und her. Und danach werden wie besprochen die Tasten KEY1 und KEY2 abgefragt und deren Status auf den LEDs angezeigt.
Das Programm lädt sich auch ohne große Mucken auf den APM32 hoch:
STM32 ST-LINK CLI v3.3.0.0
STM32 ST-LINK Command Line Interface
ST-LINK SN: xxx
ST-LINK Firmware version: V2J31S7 (Need Update)
Connected via SWD.
SWD Frequency = 4000K.
Target voltage = 3.2 V
Connection mode: Normal
Reset mode: Software reset
Device ID: 0x414
Device flash Size: 256 Kbytes
Device family: STM32F10xx High-density
Loading file...
Flash Programming:
File : ...\APM32F103VC-Test.ino.bin
Address : 0x08000000
Memory programming...
0% ... 100%
Memory programmed in 0s and 656ms.
Programming Complete.
MCU Reset.
Application started.
rem: Using the open source texane-stlink instead of the proprietary STM stlink exe
rem: texane-stlink\st-flash.exe write ...\APM32F103VC-Test.ino.bin 0x8000000
Der Serial Monitor in der Arduino IDE gibt auch die entsprechenden Zeilen aus, die ich mit dem APM32-Board geschickt habe:
Programm gestartet.
blinky blinky...
Drücke eine Taste, die enstprechende LED geht dann an...
Taste 1 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 1 gedrückt bzw. losgelassen
Taste 1 gedrückt bzw. losgelassen
Taste 1 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 1 gedrückt bzw. losgelassen
Taste 1 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Taste 2 gedrückt bzw. losgelassen
Fazit soweit
Das APM32F103VC-Mini-Entwicklungsboard von Geehy lässt sich also in die Arduino 2.0-Umgebung integrieren: Frisch kompilierte Firmware wird gleich am Anschluss hochgeladen und auch der Serial Monitor zeigt an, was über den USART1-Port ausgegeben wird.Wenn man die Anzahl der Pins, den Speicherausbau, die Geschwindigkeit und der Preis ins Kalkül zieht, bietet er ein besseres Preis/Leistungsverhältnis als ein Arduino Mega Clone, welche beide bei ca. 20 Euro liegen derzeit.
Wie an ein Board kommen?
Ich hatte ja nun das Glück, das APM32F103VC-Mini-Board direkt vom Hersteller Geehy auf der embedded world 2023 bekommen zu haben.Jetzt habe ich mich ein bisschen für euch umgeschaut, falls ihr auch so ein Board haben wollt, um mit ihm zu experimentieren oder eure Projekte zu machen. In der Distributoren-Liste auf der Website von Geehy ist für Deutschland nur die Karl Kruse GmbH in Düsseldorf gelistet, aber ein kurzer Anruf dort, den ich jetzt nicht als sonderlich kundenfreundlich empfand, hat zur Tage gefördert, dass diese nicht an Endverbraucher direkt verkaufen. Außerdem habe ich irgendwie keinen Webshop ausfindig machen können. Für uns Hobbyelektroniker also keine Adresse.
Aber ich habe noch die SOS electronic GmbH aus Hirschau mit der unter Elektro-Hobbyisten sicherlich bekannten Adresse "Klaus-Conrad-Str. 1" im Web ausfindig machen können. SOS Electronic ist bei Geehy auch als Distributor für Tschechien, die Slowakei und Ungarn gelistet. Und die haben auch einen Webshop, in dem man das Board auch bestellen kann.
Das Board kostet dort derzeit 20.51€ (Stand: 22.03.2023). Aber: der Preis ist ohne Mehrwertsteuer. Was vermuten lassen könnte, dass das Board wieder nur an Kunden mit Gewerbeschein, sprich Einzelhändler verkauft wird. Also habe ich dort einfach mal angerufen und mich erkundigt. Das Gespräch war schon sehr viel freundlicher. Und man hat mir versichert, dass man auch an Endkunden verkaufen würde, dann natürlich zuzüglich derzeit 19% MwSt. Der Versand würde wohl aus der Slowakei erfolgen, aber ich schätze, dass doch relativ schnell da sein wird. Auf der Website steht 2-3 Tage mit DPD.
Soweit ich das recherchieren konnte, verkauft Geehy China nicht direkt und auch in den einschlägigen China-Shops wie AliExpress oder Banggood konnte ich nicht fündig werden.
Aber wenigstens gibt es eine Möglichkeit (die über SOS Electronics), in Deutschland schnell an ein Board zu kommen. Wegen Versandkosten und eventuellem Minderwertaufschlag wäre es vielleicht geschickt, gleich zwei Exemplare zu bestellen.
Auch den Geehy-Link und den APM32 PROG gibt es übrigens bei SOS. Jeweils für 17.09 € zzgl 19% MwSt. Nur, falls jemand etwas professionelles vorhat.
Sollten sich noch andere Versender auftun, werde ich an dieser Stelle berichten.
Weitere Aussichten
Ich habe keine Zweifel, dass das Board also ganz normal als Arduino bzw. STM32-Alternative funktioniert und sich programmieren lässt. Trotzdem wäre es vielleicht nicht schlecht, ein paar alte STM32-Projekte zu portieren und zu sehen, ob diese auf dem Board laufen würde bzw. einfach mal zu schauen, ob Displays, Sensoren, IC2, SPI so funktionieren, wie man sich das denkt.Ich kann euch noch nicht versprechen ob und wann ich das angehe, vielleicht springe ich auch ins kalte Wssser und benutze das Board auch einfach für das nächste Projekt, bei dem ich viele Pins benötige.
Wenn sich was Neues getan hat, werde ich an dieser Stelle auf jeden Fall einen Link dahin einfügen, damit ihr wisst, wie es weitergeht. Natürlich könnt ihr mir auch auf Twitter folgen (siehe Link ganz am Ende der Seite), um keine Neuigkeiten zu verpassen.
Quellen, Literaturverweise und weiterführende Links
(1) Hackaday: STM32 Clones: The good, the bad and the ugly
(2) EEVblog Forum: Topic: Which of the many STM32F103 clones are actually usable

(3) Richi's Lab: Apexmic APM32 Die-Bilder
(4) CNX-Software: Geehy APM32F103 clone of STM32F103 MCU has been tested to work without PCB or code modifications

(5) LinkedIn-Beitrag von Viral Purohit / Sunrom über den APM32F103CBT6

(6) Youtube Video von Ralph S Bacon: STM32 clones - good value or cheap copy? Asian Alternative Components
