Vollständiges GDB-Debugging über USB auf der BluePill-Karte (STM32F103С8T)

Dieser Artikel konzentriert sich auf die Programmierung und das vollständige Debuggen des STM32F103C8T6-Mikrocontrollers über USB.





Einmal erhielten Kollegen ein Angebot zur Teilnahme an einem IoT-Projekt. Das System, das für den Start eines Single-Threaded-Skripts vorgesehen ist. Das Debuggen wurde mithilfe von Protokollen durchgeführt. Und dann kam mir die Idee eines vollwertigen Remote-Debugging von Projekten für Mikrocontroller.





, . BluePill STM32F103. MicroUSB, . UART GSM .





, . :





  1. USB .





  2. GDB.





  3. GDB .





  4. .





. (bootloader).





1. . .. USB. USB- WinUSB. libopencm3. , , , , "MSFT100" "WINUSB". WinUSB. (USB-Endpoint) control endpoint 0, bulk out endpoint 1, bulk in endpoint 81, bulk in endpoint 82. USB, endpoint 1- , endpoint 81 - , 82 - (). USB "USB in a NutShell".





2. . . . , ,- . , Cortex M . Thread Handler. , . Handler mode . , flash- STM32F103C8T6 Handler , .





Flash Thread . , , . . , - , , . , , . , , , . , , "" , Flash .





. , , , , . . ,- , . , Bootloader-e. , . " " . - .





3. GDB-. BlackMagic, . arm-none-eabi-gdb. , . GDB- WinUSB.





4. , printf. endpoint 82. 8 - , USB (Host-).





printf bootloader-. ? , , / . , BIOS int13, ms-dos int21. , .. "svc". , SVC, bootloader-. .





Bootloader 10Kb flash , 16Kb . 4K . USB, , . . 16Kb 20Kb 48Kb flash . Flash- STM32F103C8T6 64Kb 128Kb,- 112Kb.





, . , , , . , step . , , .





, - :





  1. GDB. .. /. STM32CubeIDE. 0x8004000.





  2. .





  3. .





  4. .





  5. .





  6. .





  7. Zwangsstopp.





  8. Debug-Druck auf der GDB-Serverkonsole.





In der debuggten Firmware können Sie die Adresse des Interrupt-Handler-Vektors nicht ändern. Es ist zwar möglich, den Systemaufruf setVectorBase hinzuzufügen, wodurch das Problem behoben wird. Interrupt-Prioritäten können nicht in beliebige Werte geändert werden. Die Priorität muss im Bereich von 0x40 - 0xF0 liegen. Sie können Systick-Interrupts, USB-Interrupts und Interrupts DebugMon, SvcHandler sowie alle FaultHandler-s nicht deaktivieren.





Der Code des Projektprototyps ist hier verfügbar








All Articles