====== STM32103C8T6 aka PluePill mit PlatformIO auf Linux ====== Ich verwende für C+ + sehr gerne den Qt Creator. Dieser kann auch mit PlatformIO bzw. umgekehrt. Das BluePill-Board (Universelles STM32F103-Board) lässt sich damit recht einfach programmieren. {{::core_learning_board_module_arduino_stm32_f103_c8t6.jpg?direct&200|}} {{::stm32f103_pinout_diagram.png?direct&200|}} {{::bluepill_schematic.png?direct&200|}} Foto und Pinout von https://commons.wikimedia.org/ Man beachte den geänderten Pullup-Widerstand. Den braucht USB, um richtig erkannt zu werden. Bei meinem BluePill Board war der schon richtigerweise 1k5 (statt fälschlicherweise 10k). ===== Notwendige/Hinreichende Hardware ===== * STLink V2 * BluePill mit einem originalen STM32F103C8T6 ((hier werden auch Nachbau-MCUs verkauft, darüber beschwert sich dann OpenOCD wegen falscherm ID-Code: hla_swd Warn : UNEXPECTED idcode: 0x2ba01477 Error: expected 1 of 1: 0x1ba01477)) * Micro-USB Kabel für Stromversorgung und SerialUSB-Verbindung ===== Notwendige Schritte ===== ==== 1. Qt Creator installieren ==== sudo apt install build-essential clang-8 qt5-default qt5-doc qt5-doc-html qtcreator'' ==== 2. PlatformIO Core installieren: ==== python3 -c "$(curl -fsSL https://raw.githubusercontent.com/platformio/platformio/develop/scripts/get-platformio.py)" sudo ln -s ~/.platformio/penv/bin/platformio /usr/local/bin/platformio sudo ln -s ~/.platformio/penv/bin/pio /usr/local/bin/pio sudo ln -s ~/.platformio/penv/bin/piodebuggdb /usr/local/bin/piodebuggdb'' ==== 3. Zugehörige udev-rules installiern: ==== curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/master/scripts/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules ==== 4. platformio.ini anlegen ==== Im Projektverzeichnis braucht es die Datei platformio.ini ; Please visit documentation for the other options and examples ; https://docs.platformio.org/page/projectconf.html [env:genericSTM32F103R8] platform = ststm32 board = genericSTM32F103R8 framework = arduino upload_protocol = stlink # refer to https://github.com/platformio/platform-ststm32/issues/178#issuecomment-467286677 build_flags = -D USBCON -D PIO_FRAMEWORK_ARDUINO_ENABLE_CDC -D HAL_PCD_MODULE_ENABLED -D USBD_VID=0x1EAF -D USBD_PID=0x0004 -D USB_PRODUCT=\"bluepill\" ==== 5. Qt Creator Projekt erstellen ==== pio init --ide qtcreator ==== 6. Qt Creator Projekt öffnen und anpassen: ==== Im Bereich "Build" muss angepasst werden: * Build Directory * Custom Build command: ''pio run'' * Custom Clean command: ''pio run --target clean'' {{ ::2020-12-07_002.png?direct&600 |}} Im Bereich "Run" passen wir folgendes an: * Custom Deploy Step: ''pio run --target upload'' * Custom Run Configuration: ''echo "fertig geflasht"'' * echo muss im Terminal gestartet werden (Checkbox setzen) {{ ::2020-12-07_003_.png?direct&600 |}} ==== 7. Blinky Demo ==== Wir legen eine neue cpp-Datei an im Verzeichnis ''src'': #include #undef LED_BUILTIN #define LED_BUILTIN PC13 void setup() { pinMode(LED_BUILTIN, OUTPUT); Serial.begin(9600); SerialUSB.begin(9600); } void loop() { digitalWrite(LED_BUILTIN, HIGH); Serial.println("Serial LED OFF"); SerialUSB.println("SerialUSB LED OFF"); delay(1000); digitalWrite(LED_BUILTIN, LOW); Serial.println("Serial LED ON"); SerialUSB.println("SerialUSB LED ON"); delay(1000); } ==== 8. Bauen und Hochladen ==== Mit **STRG+B** kann man das Projekt bauen. Hierzu ist eine Internetverbindung notwendig, da sich PlatformIO bei Bedarf die entsprechende Toolchain holt. Dieses Feature macht PlatformIO so besonders. Mit **STRG+R** starten wir Run, und Qt Creator führt den zuvor entsprechend konfigurierten Befehl pio run --target upload aus. Hat alles geklappt, sollte ein Terminalfenster erscheinen mit dem Test "fertig geflasht". ==== 9. Hinzufügen von Bibliotheken ==== Ordner der Arduino-Bibliotheken ((sind nach der Installation mit der Arduino IDE im Home-Verzeichnist unter ~./Arduino/libraries zu finden)) sollten im Projektverzeichnis unter ./lib abgelegt werden. Ein Aktualisieren des Qt Creator-Projektes mittels pio init --ide qtcreator ist notwendig, damit der Qt Creator dann die Bibliotheken auch findet ((hierbei wird das Project-File mit den entsprechenden Abhängigkeiten aktualisiert)). ===== STM32duino ===== Es gibt einen [[https://github.com/rogerclarkmelbourne/STM32duino-bootloader|Bootloader]], der das Board rein über USB programmierbar macht - ganz nach dem Geschmack von Arduino. Viele Arduino-Boards verwenden hierfür einen zweiten Mikrocontroller. Der Arduino DUE mit dem Atmel SAM3x8e kann aber auch direkt per USB programmiert werden. Ein im SAM3 fix eingebauter Bootloader ermöglicht dies. STM sieht sowas leider nicht vor. Daher muss ein eigener Bootloader mit einem STlink reingespielt werden. Ob dieser Bootloader schon produktreif ist, muss erst evaluiert werden. In einem Produkt, wo nur der USB-Anschluss zugänglich ist, soll man keinen Reset-Taster drücken oder gar einen Boot0-Jumper setzen müssen. {{tag> Artikel Deutsch Arduino C++}}