Der Mikrocontroller STM32F103C8T6 verfügt über einen 72MHz ARM Cortex M3 CPU mit 32Bit Architektur und vielen zusätzlichen Features welche ich hier noch näher erläutern möchte.
Bezug
Der Mikrocontroller kann schon ab 1,87 € (inkl. Versandkosten) über eBay.de* bezogen werden. Dieses Board kann aber auch bei amazon.de*, banggood.com (Umrechnungskurs von Dollar zu Euro beachten!) bezogen werden, wobei die Preise hier deutlich höher liegen (Stand 18.01.2018).
Für das Aufspielen von Sketche im seriellen Modus wird ein FTDI Modul benötigt, dieses gibt es wiederum bei eBay.de* für ca. 3 €.
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Technische Daten
- CPU
- ARM Cortex M3
- Architektur – 32Bit
- Taktfrequenz – 72 MHz
- Speicher
- 64Kb – Flash Speicher
- 20Kb – SRAM
- Schnittstellen
- digitale I/O Pins – 37
- SPI – 2
- UART – 3
- I2C – 2
- CAN – 1
- interne RealTimeClock
- Abmessungen – 22,86 mm x 53.34 mm
- Eingangsspannung – 2V bis 3.6V
- Betriebsspannung – 3.3V
- max. Betriebstemperatur -20 °C bis +70 °C
Zu dem Board gibt es eine Wikiseite, wo weitere Informationen zu finden sind.
Dort gibt es auch eine Grafik mit der Pinbelegung (Pinout).
Verbinden mit der Arduino IDE
Wie man die Arduino IDE installiert habe ich bereits im Tutorial Arduino IDE installieren ausführlich erläutert, in diesem Abschnitt möchte ich auf die Verbindung mit dem STM32F103C8T6 eingehen.
Den Treiber für das Board STM32F103C kann aus dem GitHub Repository von RogerClarkMelburne (*.zip) geladen werden. Nachdem die ca. 37 MB große Zip-Datei geladen und entpackt wurde, wird das Verzeichnis “Arduino_STM32-master” in den Pfad C:\Programs\Arduino\hardware der Arduino IDE kopiert.
Nachdem die Arduino IDE gestartet wurde, steht das neue Board unter “Werkzeuge” -> “Boards: xyz” zur Verfügung:
Damit ist die Installation aber noch nicht abgeschlossen, es muss noch über den Boardverwalter das Plugin “Arduino STM32F4” Version 1.0.1 installiert werden. Es gibt eine Beschreibung wo das Plugin “Arduino SAM boards (Cortex-M3)” genannt wurde, jedoch hat dieses in meinem Fall nicht zum Erfolg geführt.
Anschluss über ein FTDI Modul
Obwohl der Mikrocontroller über einen Micro USB-Anschluss verfügt muss man diesen über einen separaten FTDI Modul programmieren.
Ein FTDI Modul habe ich bereits im Tutorial zum Arduino ProMini – Anschließen & Programmieren verwendet, möchte hier jedoch auf den besonderen Anschluss eingehen. Der Mikrocontroller ist hier in jeder Hinsicht etwas Besonderes.
FTDI Modul | STM32F103C8T6 |
---|---|
GND | GND |
VCC | 3,3 V |
RX | A9 |
TX | A10 |
Beim FTDI Modul ist darauf zu achten das dieses auf 3,3V gepint ist, es gibt auch Module welche “nur” 5V liefern und sich nicht einstellen lassen. Der STM32F103C8T6 ist nur für eine Eingangsspannung von 2V bis 3,6V geeignet.
Beispiel Sketch aufspielen
Es soll nun ein einfaches “Hello World!” auf dem seriellen Ausgang ausgegeben werden.
Boot Modus einstellen
Der STM32F103C8T6 verfügt über zwei Boot Modi “0” und “1”. Über den Boot Modus stellt man den Speicher ein, wo der Sketch hochgeladen werden soll. Wir stellen in diesem Fall den Jumper gegenüber von dem “Reset Taster” auf “1” (siehe Bild).
Einstellungen in der Arduino IDE
Unter dem Menüpunkt “Werkzeuge” -> “Board: xyz” wird das Board “Generic STM32F103C series” ausgewählt.
Als Nächstes kommt es auf das Model an, dieses kann im Menüpunkt “Variant” ausgewählt werden.
Als letzten Punkt stellt man den Modus ein, mit welchem der Sketch auf den STM32 geladen werden soll, in diesem Tutorial verwende ich ein FTDI Modul und wähle somit “Serial” aus.
Quellcode
Der nachfolgende Quellcode wird jetzt sicherlich keine Überraschung, jedoch der Vollständigkeit halber möchte ich diesen hier aufführen.
void setup() { Serial.begin(9600); } void loop() { Serial.println("Hello World!"); delay(1000); }
Auf dem STM32F103C8T6 Board ist unter anderem eine LED verbaut, welche man über den PIN PC13 ansteuern kann, dieses wollen wir nun im nächsten Sketch machen.
Beispiel – interne LED ansteuern
Die interne LED liegt auf dem Pin PC13 und kann wie beim Arduino UNO üblich gesteuert werden.
#define ledPin PC13 const int PAUSE = 1000; void setup() { //LED Pin als Ausgang setzen. pinMode(ledPin, OUTPUT); } void loop() { //Lesen des zustandes der LED (LOW oder HIGH) und den Wert umkehren. //D.h. aus LOW wird HIGH und aus HIGH wird LOW. digitalWrite(ledPin,!digitalRead(ledPin)); //Kleine Pause von 1 sek. //um den Interval des Blinkens zu ändern muss hier die Pause verkürzt //oder erhöht werden. delay(PAUSE); }
Video
In dem Video zeige ich wie man das Board STM32F103C8T6 mit dem FTDI Modul verbindet und ein Sketch hochlädt.
Troubleshooting
Fehler – “Failed to init device”
Der Fehler tritt meist beim Upload eines neuen Sketches auf. Um diesen zu beheben, muss nur der Reset Taster betätigt werden und der Uploadvorgang erneut gestartet werden.
Der Sketch verwendet 7556 Bytes (11%) des Programmspeicherplatzes. Das Maximum sind 65536 Bytes. Globale Variablen verwenden 1984 Bytes (9%) des dynamischen Speichers, 18496 Bytes für lokale Variablen verbleiben. Das Maximum sind 20480 Bytes. Failed to init device. stm32flash 0.4 http://stm32flash.googlecode.com/ Using Parser : Raw BINARY Interface serial_w32: 115200 8E1
Der Fehler “Failed to init device” geht leider nicht weg nach dem der Reset Taster betätigt wird.
Mit dieser Anleitung war es mir nicht möglich ein Programm auf den Microcontroller zu laden.
Danke fürs Troubleshooting, hab ewig nach dem Fehler gesucht! Bei mir hats super funktioniert 🙂
Danke, dieser Blog hat mir geholfen, meinen Stm32 zum laufen zu bringen. Alle anderen schließen den 3.3V VCC-Aushang an 5 V des stm32 an, obwohl vorher darauf hingewiesen wird, dass der Jumper auf 3,3V gesetzt werden muss.
der sonst erscheindene Fehler:
Failed to init device.
stm32flash 0.4
http://stm32flash.googlecode.com/
Using Parser : Raw BINARY
Interface serial_w32: 115200 8E1
war damit nicht mehr aufgetreten.