Depuración completa de GDB a través de USB en la placa BluePill (STM32F103С8T)

Este artículo se centrará en la programación y la depuración completa del microcontrolador STM32F103C8T6 a través de USB.





Una vez, los colegas recibieron una oferta para participar en un proyecto de IoT. El sistema proporcionó el lanzamiento de un script de un solo subproceso. La depuración se realizó mediante registros. Y luego tuve la idea de una depuración remota completa de proyectos para microcontroladores.





, . 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. Parada forzada.





  8. Depurar la impresión en la consola del servidor GDB.





En firmware depurado, no puede cambiar la dirección del vector del controlador de interrupciones. Aunque es posible agregar la llamada al sistema setVectorBase, que resuelve el problema. Las prioridades de interrupción no se pueden cambiar a valores arbitrarios. La prioridad debe estar en el rango 0x40 - 0xF0. No puede deshabilitar interrupciones systick, interrupciones usb e interrupciones DebugMon, SvcHandler, así como todos los FaultHandler-s.





El código del prototipo del proyecto está disponible aquí.








All Articles