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 .
, . :
USB .
GDB.
GDB .
.
. (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 . , , .
, - :
GDB. .. /. STM32CubeIDE. 0x8004000.
.
.
.
.
.
Parada forçada.
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