# Rust on Robots - Workshop (Didacta Ed.) Rust ist schnell, modern und hilft dabei, typische Embedded-Fehler früh zu vermeiden – genau das, was man auf Robotern braucht. In diesem Workshop gebe ich eine kurze, praxisnahe Einführung in Rust und wir steigen dann direkt in gemeinsame Übungen ein: selbst Rust schreiben, kleine Aufgaben lösen und anschließend Rust auf einem STM32 Bluepill flashen und testen. Ideal für RoboCup-Interessierte aus der außerschulischen bzw. beruflichen Bildung, die schon einmal programmiert haben und Rust als Werkzeug für robuste Robotik ausprobieren wollen. ## Workshop Layout Jede Übung hat ihren eigenen Ordner. Der Lernpfad ist nummeriert. Jede Übung hat Aufgabe mit TODOs zum Lösen. ## Ablauf 0. Install Rust 1. Rust Basics - Hello World 2. Rust Basics - Typen 3. Rust Basics - Ownership/Borrow 4. kleines Desktop Programm 5. Embedded - no std 6. Embedded - LED Blinky 7. Embedded - Button Input 8. Embedded - Analog Readout 9. Embedded - EmbassyRS # Hardware - MCU board: STM32F103C8T6 Bluepill - Debug probe: ST-Link (SWD) ## SWD Wiring 1. ST-Link `SWDIO` -> Bluepill `PA13` 2. ST-Link `SWCLK` -> Bluepill `PA14` 3. ST-Link `GND` -> Bluepill `GND` 4. ST-Link `3V3` -> Bluepill `3V3` 5. Optional: ST-Link `NRST` -> Bluepill `NRST` ## Workshop I/O Wiring 1. LED: - Onboard LED an `PC13` (active-low) 2. Button: - Externer Taster von `PA0` nach `GND` - Interner Pull-up wird im Code aktiviert 3. Analog (optional): - Poti/Sensor-Ausgang an `PA1` - Sensorversorgung über `3V3` + `GND` # Troubleshooting ## Host Setup 1. `rustup: command not found` - Rust via rustup installieren. 2. `probe-rs: command not found` - `cargo install probe-rs-tools` 3. Target fehlt - `rustup target add thumbv7m-none-eabi` ## Probe / Flashing 1. `No probe found` - USB-Kabel/Port prüfen - ST-Link Treiber/udev prüfen - `probe-rs list` erneut ausführen 2. `chip not found` - Runner-String prüfen: `STM32F103C8` 3. `Permission denied` (Linux) - udev-Regeln für ST-Link setzen und neu laden ## Runtime Behavior 1. LED blinkt nicht - PC13 active-low beachten - Versorgung prüfen 2. Button reagiert nicht - Taster nach GND verdrahten - `PA0` korrekt belegt? 3. Analogwerte ändern sich nicht - Sensor/Poti wirklich an `PA1` - Gemeinsame Masse sicherstellen ## Fallback in Session Wenn eine Station nicht stabil läuft: 1. Mit funktionierender Nachbarn pairen. 2. `solution/` ausführen. 3. Später wieder auf `task/` zurückwechseln.