この記事では、USBを介したSTM32F103C8T6マイクロコントローラーのプログラミングと完全なデバッグに焦点を当てます。
かつて、同僚はIoTプロジェクトへの参加の申し出を受けました。シングルスレッドスクリプト起動用に提供されたシステム。デバッグはログを使用して行われました。そして、マイクロコントローラー用のプロジェクトの本格的なリモートデバッグのアイデアを思いつきました。
, . 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.
.
.
.
.
.
強制停止。
GDBサーバーコンソールへのデバッグ印刷。
デバッグされたファームウェアでは、割り込みハンドラベクタのアドレスを変更することはできません。setVectorBaseシステムコールを追加することは可能ですが、これで問題は解決します。割り込みの優先順位を任意の値に変更することはできません。優先度は0x40〜0xF0の範囲である必要があります。systick割り込み、usb割り込み、DebugMon、SvcHandler、およびすべてのFaultHandlerの割り込みを無効にすることはできません。