# 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.
