web-dev-qa-db-ja.com

STM32CubeIDEは1回だけフラッシュでき、SWDデバッグはできません

数年前から、mbedオンラインコンパイラーを使用して.binファイルを作成し、ST-LINK/V2 USBドングルを使用して、次のようにコマンドラインでフラッシュしました。すべて正常に機能します。

st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000

今日、私はSTM32CubeIDE for Linux(Fedora 30)をダウンロードし、maple mini(STM32F103CBT6)を使用してこのチュートリアルを開始しました。

https://www.digikey.co.nz/en/maker/projects/getting-started-with-stm32-introduction-to-stm32cubeide/6a6c60a670c447abb90fd0fd78008697

プロジェクトをビルドしてデバッグ実行を開始すると、次の出力が得られます。

STMicroelectronics ST-LINK GDB server. Version 5.3.2
Copyright (c) 2019, STMicroelectronics. All rights reserved.

Starting server with the following options:
        Persistent Mode            : Disabled
        Logging Level              : 1
        Listen Port Number         : 61234
        Status Refresh Delay       : 15s
        Verbose Mode               : Disabled
        SWD Debug                  : Enabled

Waiting for debugger connection...
Debugger connected
      -------------------------------------------------------------------
                        STM32CubeProgrammer v2.2.0                  
      -------------------------------------------------------------------



Log output file:   /tmp/STM32CubeProgrammer_2ZxzGk.log
ST-LINK SN  : 34006B063058373138650943
ST-LINK FW  : V2J34S7
Voltage     : 3.21V
SWD freq    : 4000 KHz
Connect mode: Under Reset
Reset mode  : Hardware reset
Device ID   : 0x410
Device name : STM32F101/F102/F103 Medium-density
Flash size  : 64 KBytes
Device type : MCU
Device CPU  : Cortex-M3



Memory Programming ...
Opening and parsing file: ST-LINK_GDB_server_Q2zZSF.srec
  File          : ST-LINK_GDB_server_Q2zZSF.srec
  Size          : 4648 Bytes
  Address       : 0x08000000 


Erasing memory corresponding to segment 0:
Erasing internal memory sectors [0 4]
Download in Progress:


File download complete
Time elapsed during download operation: 00:00:00.595



Verifying ...




Download verified successfully 


Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Target is not responding, retrying...
Error! Failed to read target status 
Debugger connection lost.
Shutting down...

その後、これを取得したため、デバッグセッションを開始できなくなりました。

enter image description here

LEDが期待どおりに点滅しているのが見えるので、プログラムが実際にボードにフラッシュされていることがわかります。しかし、STM32CubeIDEではこれ以上何もできません。以前と同じようにコマンドラインからフラッシュしようとすると、次のように機能しなくなります。

[root@localhost Downloads]# st-flash write 01_blink.NUCLEO_F103RB.bin 0x8000000 
st-flash 1.5.1-38-gc3577b5
2020-03-24T13:51:09 INFO common.c: Loading device parameters....
2020-03-24T13:51:09 WARN common.c: Invalid flash type, please check device declaration
  core status: unknown
Unknown memory region

幸い、私はST-Link UTILITY(Windowsの場合)を使用し、接続する前にリセットボタンを押したままにして、最初に戻ることができます。

http://www.kerrywong.com/2012/08/02/the-dreaded-cannot-connect-to-st-link-error-message/

しかし、明らかにこれは生産的な開発を行うための実行可能な状況ではありません。何が悪いのですか?

「デバッグ構成」ダイアログの「デバッガ」タブで、「インターフェース」をSWDに設定しようとしました(すでに実際に使用されていました)。また、「動作のリセット」のすべてのオプションを試しましたが、結果は変わりません。

2
iforce2d

なぜこれが常に起こるのですか?私は何かに数時間苦労し、スクリーンショットなどでできる限り簡潔で明確な質問を作成するためにさらに20分費やし、投稿後2分で通常は別のSO何時間もの検索で何とか見たことがないと答えます。私が尋ねた質問の約半分はSOがこのように終わったと思います。

問題は、SWDを使用することを宣言しない限り、どのピンでSWDがデフォルトで有効にならないことです。そのため、新しいプログラムがフラッシュされるとすぐに、SWD接続が停止します。私は、mbedプログラムがデフォルトで標準ピンでのSWDの使用を保持しているため、問題が発生することはなかったと思います。

とにかくこれを回避するには、ピン配置と構成に戻ります(プロジェクトエクスプローラーで.iocファイルをダブルクリックします)。 SWDの適切なピン(私の場合はPA13、PA14)を設定し、[システムコア]で[SYS]をクリックして、[デバッグ]オプションを[シリアルワイヤー]に設定します。

enter image description here

4
iforce2d

はい、それは正しいiforce2dです(ところで、私はあなたのYouTube – RCビデオを楽しんでいます)。シリアルワイヤデバッグを有効にしたら、ST-Linkユーティリティを使用してすべてを最初に消去する必要なく、新しいプログラムをボード(IDE内)にフラッシュできます。

次の手順に従ってください:

  1. BOOT0ピンをハイ(3.3v)に接続します。BluePillボードには、このためのジャンパーが便利です。 (メイプルミニについてはわかりません)
  2. リセットボタンを押します。
  3. 新しいプログラムをビルドして実行します(STM32CubeIDE内)。
  4. ジャンパーをゼロに戻します。

STM32でSWDピンが有効になっているプログラムを取得すると、「ロックアウト」されることがなくなるため、この後にBOOT0を再度使用する必要はありません…

0
Johan