BluePillボード上のUSBを介した完全なGDBデバッグ(STM32F103С8T)

この記事では、USBを介したSTM32F103C8T6マイクロコントローラーのプログラミングと完全なデバッグに焦点を当てます。





かつて、同僚はIoTプロジェクトへの参加の申し出を受けました。シングルスレッドスクリプト起動用に提供されたシステム。デバッグはログを使用して行われました。そして、マイクロコントローラー用のプロジェクトの本格的なリモートデバッグのアイデアを思いつきました。





, . 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. 強制停止。





  8. GDBサーバーコンソールへのデバッグ印刷。





デバッグされたファームウェアでは、割り込みハンドラベクタのアドレスを変更することはできません。setVectorBaseシステムコールを追加することは可能ですが、これで問題は解決します。割り込みの優先順位を任意の値に変更することはできません。優先度は0x40〜0xF0の範囲である必要があります。systick割り込み、usb割り込み、DebugMon、SvcHandler、およびすべてのFaultHandlerの割り込みを無効にすることはできません。





プロジェクトのプロトタイプコードはこちらから入手できます








All Articles