Débogage GDB complet via USB sur la carte BluePill (STM32F103С8T)

Cet article se concentrera sur la programmation et le débogage complet du microcontrôleur STM32F103C8T6 via USB.





Une fois, des collègues ont reçu une offre de participer à un projet IoT. Le système a fourni pour le lancement de script à un seul thread. Le débogage a été effectué à l'aide de journaux. Et puis j'ai eu l'idée d'un débogage à distance complet des projets pour les microcontrôleurs.





, . 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. Arrêt forcé.





  8. Impression de débogage sur la console du serveur GDB.





Dans le micrologiciel débogué, vous ne pouvez pas modifier l'adresse du vecteur de gestionnaire d'interruption. Bien qu'il soit possible d'ajouter l'appel système setVectorBase, ce qui résout le problème. Les priorités d'interruption ne peuvent pas être modifiées en valeurs arbitraires. La priorité doit être comprise entre 0x40 et 0xF0. Vous ne pouvez pas désactiver les interruptions systick, les interruptions USB et les interruptions DebugMon, SvcHandler, ainsi que tous les FaultHandler-s.





Le code prototype du projet est disponible ici








All Articles