Depuração GDB completa via USB na placa BluePill (STM32F103С8T)

Este artigo se concentrará na programação e depuração completa do microcontrolador STM32F103C8T6 via USB.





Certa vez, os colegas receberam uma oferta para participar de um projeto de IoT. O sistema fornecido para o lançamento de script de thread único. A depuração foi feita usando logs. E então tive a ideia de uma depuração remota completa de projetos 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 forçada.





  8. Depure a impressão no console do servidor GDB.





No firmware depurado, você não pode alterar o endereço do vetor de tratamento de interrupção. Embora seja possível adicionar a chamada de sistema setVectorBase, o que resolve o problema. As prioridades de interrupção não podem ser alteradas para valores arbitrários. A prioridade deve estar no intervalo 0x40 - 0xF0. Você não pode desabilitar interrupções de systick, interrupções de usb e interrupções DebugMon, SvcHandler, bem como todos os FaultHandler-s.





O código do protótipo do projeto está disponível aqui








All Articles