Wie reprogrammiert man einen Mikrocontroller?
Globaler Lieferant elektronischer Komponenten AMPHEO PTY LTD: Umfangreiches Inventar für One-Stop-Shopping. Einfache Anfragen, schnelle, individuelle Lösungen und Angebote.
Hier ist ein klare, schlichte Checkliste, die Sie für fast jeden Mikrocontroller (MCU) anwenden können. Behalten Sie sie griffbereit; die gleiche Vorgehensweise gilt für AVR, PIC, STM32, ESP32 und mehr.
Kurzüberblick
Neu-Programmieren bedeutet, den Flash des MCUs mit neuer Firmware zu löschen/überschreiben – über eine Programmierschnittstelle (SWD/JTAG/ISP/ICSP/USB/UART/DFU) mit einem Programmiergerät oder Bootloader-Tool.
Universelles 10-Schritte-Vorgehen
-
Exakte Teilenummer ermitteln.
Chipaufdruck prüfen (z. B. „STM32F103C8T6“, „ATmega328P“, „PIC32MX170F256B“, „ESP32-WROOM-32“). -
Schnittstelle wählen (eine davon):
-
Passendes Hardware-Tool besorgen:
-
ST-Link für STM32, J-Link (generisch ARM), PICkit 3/4 für PIC, USBasp/Atmel-ICE für AVR, FTDI/CP2102 USB-UART für serielle Bootloader, ESP32 meist direkt via USB (ROM-Bootloader).
-
-
Richtig verdrahten (Spannungspegel beachten!):
-
Versorgung: 3,3 V oder 5 V gemäß Datenblatt, gemeinsame GND.
-
Signale: z. B. SWDIO/SWCLK (STM32), MISO/MOSI/SCK/RESET (AVR), PGD/PGC/MCLR (PIC), TX/RX/BOOT/EN (ESP32).
-
Leitungen kurz halten; bei Bare-Chips 100 nF Abblockkondensator nahe VCC vorsehen.
-
-
MCU in den Programmier/Boot-Modus versetzen:
-
Bestimmte Pins halten/resetten (z. B. BOOT0=1 bei STM32 für System-Bootloader; beim ESP32 GPIO0=0 während Reset).
-
-
Software/Toolchain installieren:
-
STM32: STM32CubeProgrammer (oder OpenOCD)
-
AVR: avrdude (oder Atmel/Microchip Studio)
-
PIC: MPLAB IPE/X mit PICkit
-
ESP32: esptool.py (oder Arduino/PlatformIO)
-
NXP: MCUXpresso/LinkServer, TI: UniFlash/CCS, usw.
-
-
Target wählen, verbinden und Geräteinfos lesen.
Tool muss die Device ID erkennen. Falls nicht: Versorgung, Verdrahtung, TX/RX-Orientierung bzw. SWD-Leitungen prüfen. -
Löschen (falls nötig) und Firmware (.hex/.bin/.elf) programmieren.
Meist gibt es Erase → Program → Verify (Löschen → Programmieren → Verifizieren). Bei Lese/Schreibschutz ggf. Mass-Erase ausführen. -
Boot-Konfiguration/Fuses/Option-Bytes setzen (nur wenn nötig):
-
AVR Fuses (Taktquelle, Brown-Out, Bootloader-Größe)
-
STM32 Option-Bytes (RDP, nBOOT0/1, WWDG/IWDG)
-
PIC Configuration Words (Oszillator, Watchdog)
-
-
Reset und starten.
Startet es nicht: Takteinstellung prüfen, Versorgung, Vektortabelle/Startadresse korrekt?
Welche Schnittstelle benutze ich?
Familie | Typische Schnittstelle | Pins (min) | Hinweise |
---|---|---|---|
STM32 / ARM Cortex-M | SWD oder UART/USB DFU | 2–4 | Am einfachsten: ST-Link via SWD. DFU möglich, wenn ROM-Boot aktiv. |
AVR (ATmega/ATtiny) | ISP (SPI) | 6 | USBasp/Atmel-ICE; Fuses beachten, um SPI nicht „abzuschalten“. |
Microchip PIC | ICSP | 3–5 | PICkit 3/4 mit MPLAB IPE. Config-Words sind wichtig. |
ESP32 / ESP8266 | UART-ROM-Bootloader | 2 | Meist USB; GPIO0 beim Reset Low für Bootloader (Tools automatisieren das). |
NXP Kinetis/LPC | SWD/UART | 2–4 | LinkServer/J-Link/OpenSDA; teils ROM-Bootloader vorhanden. |
TI MSP430/MSP432 | JTAG/SBW | 2–4 | MSP-FET oder LaunchPad-Debugger verwenden. |
Schnellrezepte zum Kopieren
STM32 (z. B. STM32F103)
-
Hardware: ST-Link → SWDIO, SWCLK, NRST, GND (3,3 V Versorgung).
-
Software: STM32CubeProgrammer → Connect (SWD) → Erase & Program deine
.bin
an Adresse0x08000000
→ Verify. -
Bootloader-Weg: BOOT0=1, Reset, dann per UART/USB-DFU mit CubeProgrammer flashen.
AVR ATmega328P (Arduino-Uno-Kern)
-
Hardware: USBasp (oder Atmel-ICE) an 6-Pin-ISP: MISO/MOSI/SCK/RESET/VCC/GND.
-
CLI (avrdude):
-
Falls Fuses geändert und ISP „verloren“: Hochspannungs-Programmer oder externen Takt nutzen.
PIC (z. B. PIC32MX170F256B)
-
Hardware: PICkit 4 → ICSP (PGC/PGD/MCLR/VDD/GND).
-
Software: MPLAB IPE → Device wählen → Connect → Erase →
.hex
programmieren → Verify. -
Configuration Words (Oszillator, Watchdog, Brown-Out) müssen zum Board passen.
ESP32
-
Hardware: Meist nur USB. (Bei Bare-Modul: EN via Pull-Up auf 3,3 V; GPIO0 zum GND beim Reset für Bootloader.)
-
CLI:
(Offsets hängen vom Build ab; Arduino/PlatformIO erledigt das automatisch.)
Updates im Feld (ohne das Gehäuse zu öffnen)
-
Bootloader-Updates: USB-C oder UART-Header vorsehen; Firmware enthält Bootloader (DFU, UART, CAN etc.).
-
OTA-Updates: Flash in A/B-Slots aufteilen + Fail-Safe-Rollback (ESP-IDF, MCUboot auf Cortex-M).
-
Sichere Updates: Images signieren; nach der Provisionierung Read-Out-Protection (RDP) aktivieren.
Häufige Fallstricke & Lösungen
-
Keine Verbindung / unbekanntes Gerät: falscher Pegel, SWDIO/SWCLK oder TX/RX vertauscht, fehlende GND, Board versorgt Peripherie, die Leitungen herunterzieht — Lasten trennen/entfernen.
-
„Target ist read-protected“ / gesperrt: Mass-Erase durchführen (löscht alles) zum Aufheben von RDP/Lock-Bits.
-
Programm ok, läuft aber nicht: falsche Takteinstellungen (HSE/HSI/Fuse), falsche Vektortabelle/Offset, Watchdog versehentlich aktiv, BOOT-Pins falsch gesetzt.
-
Brown-Outs / zufällige Resets: unzureichende 3,3 V/5 V-Versorgung oder fehlende Abblockung; 100 nF nahe jedem VCC-Pin.
-
Beschädigte I/Os: Pegel-Mismatch (5 V-Tool an 3,3 V-MCU). 3,3 V-Programmer oder Pegelwandler verwenden.
Minimale Einkaufsliste (entwicklerfreundlich)
-
Je eins: ST-Link V2, USBasp (oder Atmel-ICE), PICkit 4, ein USB-UART-Adapter, Dupont-Jumperkabel, ESD-Armband, diverse 100 nF-Kondensatoren.
-
Software: STM32CubeProgrammer, avrdude/Microchip Studio oder MPLAB IPE, esptool.py/PlatformIO, OpenOCD.
Wenn du ein unbekanntes Board neu programmierst
-
Board/Unterseite fotografieren, nach Testpads/Labels suchen (SWD, SWCLK, TX, RX, BOOT0, RST).
-
Mit dem Multimeter Pads zu MCU-Pins zuordnen (Datenblatt-Pinout hilft).
-
Zuerst nicht-invasiv SWD/JTAG probieren (ARM-Teile), dann Bootloader-Pins.
Verwandte Artikel
- ·Was sind die Unterschiede zwischen ARM Cortex-A, Cortex-R und Cortex-M?
- ·Wie verwendet man ein Kameramodul mit einem Mikrocontroller?
- ·Wie erkenne ich Objekte mit Kamera im 8051 Mikrocontroller?
- ·Anwendung von STM32 in digitalen Stromversorgungen
- ·Welcher Mikrocontroller ist am besten, um Motorsprung zu steuern?
- ·Welche Sprache ist am besten für Robotik, IoT, KI, Spiele oder Web-Apps?
- ·Raspberry Pi Pico vs Arduino Nano vs STM32 Blue Pill vs ESP32 vs STM32 Black Pill | Vergleich
- ·Wie erstelle ich ein physisches Mikrocontrollerprojekt mit nuller Grundlage?
- ·Warum sind 4-Bit-Mikrocontroller noch nicht abgeschafft?