12 Projektvorschläge
Hier sind einige Vorschläge für Projekte die man selbständig bearbeiten kann. Wir haben das im WS2023 gemacht.
12.1 RTOS
Ideen
- Mehrere quasiparallele Tasks definieren
- Synchronisationsmittel testen
- Taskwechsel auf dem Logikanalysator untersuchen
- Resourcen verwalten (“Gatekeeper Task”)
- RTOS und Low-Power, “Tickless” Betriebsart
- Alternative RTOS, z.B. RIOT, https://www.riot-os.org, Wikipedia, Zephyr-OS (https://www.zephyrproject.org).
Lesestoff
Siehe Kapitel 6.
Elecia White, Making Embedded Systems, Kap. 6, Managing the flow of activity
Jim Ledin, Architecting High-Performance Embedded Systems, Kap. 3 Operating in Real Time
Joseph Yiu, Kap. 19, Using Embedded Operating Systems
Daniele Lacamera, Kap. 10, Parallel Tasks and Scheduling
Beispielprogramme im CubeF4 Repo
STM32CubeF4/Projects/STM32446E_EVAL/Applications/FreeRTOS/FreeRTOS_*
12.2 Programmierung
C, C++
Cube LL, HAL
Mbed-OS https://mbed-ce.dev
Meta-Framework: Platformio https://platformio.org
Alternative Bibliotheken: https://libopencm3.org
Netzwerkprogrammierung: lwIP, mbedTLS, wolfSSL (mit B-L475E-IOT01A
Filesystem:
GUI: https://lvgl.io
Alternative Sprachen
Interpreter: Micropython, Lua, JavaScript (https://www.espruino.com)
TinyGo
Rust
Artikel von Joseph Yiu, 2013. Geht ein auf Java, MatLab/SimuLink, Arduino, Mbed, Statemachines, Ada. Link
Elektor Artikelserie “Bare-Metal Programming” von Sergey Liubka (Teil 3: Mongoose OS, Webserver)
Im dritten Teil wird ein Webserver mit dem NUCLEO-F429ZI https://www.st.com/en/evaluation-tools/nucleo-f429zi.html Board implementiert. Dieses Board ist mit einer Ethernet Buchse ausgestattet.
Im Wintersemester 23/24 haben wir versucht, eine Nucleo Board ohne Ethernet Buchse mit einem externen ENC28J60 Netzwerkmodul von Berrybase zubetreiben. Siehe Repo von Team 10.
12.3 Low-Power Programmierung
STM32CubeF4/Projects/STM32446E-Nucleo/Examples/PWR/PWR_CurrentConsumptionAbschätzung Laufzeit von batteriebetriebenen Geräten
https://www.st.com/en/development-tools/stm32cubemonpwr.html
X-NUCLEO-LPM01A zur Messung der Stromaufnahme
Reinhard Keil, Frank Grobe, Designing Energy-Efficient Systems with Cortex-M Microcontrollers Link
Microchip, Low-Power Design Guide (nimmt zwar einen PIC16 als konkretes Beispiel, der Inhalt gilt aber auch für andere Controller) Link
Siehe Kapitel 7.
12.4 Debuggen
Cube Monitor https://www.st.com/en/development-tools/stm32cubemonitor.html
Tracing über SWO (Serial Wire Output) Pin des STM32
Blog Eintrag https://www.codeinsideout.com/blog/stm32/swv
Buch von Joseph Yiu, Kap. 14 (Debug and Trace)
Segger “Real Time Transfer” (RTT)
https://www.segger.com/products/debug-probes/j-link/technology/about-real-time-transfer
Keil Event Rekorder, “Real Time Events”
https://www.keil.com/pack/doc/compiler/EventRecorder/html/index.html
12.5 USB
Ideen
- USB Maus simulieren (HID Class); STM32 als USB Device
- USB UART (CDC Class); STM32 als USB Device
- USB Massenspeicher (MSC Class); STM32 als USB Host
- USB OTG (Host und Device abwechselnd)
Hinweise
Das Nucleo F446 hat keine USB Buchse die direkt an den F446 geht, deshalb benötigt man noch ein USB Breakout Board:
STM32CubeF4/Middlewares/ST/STM32_USB_Device_LibrarySTM32CubeF4/Middlewares/ST/STM32_USB_Host_LibraryBeispiele unter
STM32CubeF4/Projects/STM32446E_EVAL/Applications/USB_HostSTM32CubeF4/Projects/STM32446E_EVAL/Applications/USB_Device
Literatur
“USB in a Nutshell”
12.6 Bootloader
Boot-Kanäle: USART, CAN, SPI, I2C, USB DFU
Lacamera, Kap. 4, “The Boot-Up Procedure”
AN2606
AN3155
Der STM32 CubeProgrammer kann über den USART und das Bootloaderprotokoll (AN3155) auf den Mikrocontroller zugreifen (zusätzlich auch über JTAG, SWD, USB DFU).
AN3156 (USB DFU)
Der von ST Micro vorgegebene Bootloader ist im ROM gespeichert, kann also nicht geändert werden. Man kann aber zusätzlich einen selbstgeschriebenen Bootloader im Flash-Speicher ablegen.
Ein praktisches Feature von meist selbstgeschriebenen Bootloadern ist “Firmware Over The Air Update” (FOTA).