STM32CubeIDEでST-Link-V2が接続できない事象の対処方法

ここには簡潔に記載することにする。

【原因】

STM32CubeIDEのCode Generator(コードジェネレーター)で出力された以下、__HAL_AFIO_REMAP_SWJ_DISABLE(); のコードである。
__HAL_AFIO_REMAP_SWJ_DISABLE()は、JTAG-DPとSW-DPをDisabledにする設定なので ST-Link等のデバッガーが接続できなくなって当然である。

main()
 +- HAL_Init()
 |   +- HAL_MspInit()
 |       +- __HAL_AFIO_REMAP_SWJ_DISABLE() ★これが原因
 |

【対処】

HAL_MspInit()でコールしている__HAL_AFIO_REMAP_SWJ_DISABLE()を削除すれば良いのだが、ST-Linkが接続できないので、STM32 ST-LINK Utilityを使用してFLASHメモリに書き込んだプログラムを削除する必要がある。

【ST-LINK Utilityで接続する方法】

前提条件として、基板にRESETスイッチが必要である。(RESETスイッチが無い場合、基板に通電した状態でマイコン端子のNRSTをGNDに落とした状態がRESETスイッチON状態、GNDから離せばスイッチOFF状態ですが、場合によっては抵抗(10KΩ)を付けないと基板が死にます。RESETサブ基板を作りましょう)
手順①:ST-LINK Utilityを起動する。※ST社サイトからダウンロードできます。
手順②:基板のRESETスイッチを押し続ける。
手順③:ST-LINK Utilityの[Connect to the target]ボタンをクリックする。
手順④:基板のRESETスイッチを離す。
※接続できない場合、手順④の実施タイミングにより接続できない時があるので、手順②からやり直しましょう。
手順⑤:書き込んだセクターだけをメニューの[Erase sector]で消去する。
※[Full chip erase]ボタンでFLASHメモリの全領域を消去しても良いが、DFU(プログラムダウンローダー)まで消去される。私はDFUを使用せず、ST-Linkでプログラムを書き込んでいるので全領域消去してます。
※Erase sectorを調べるには、プログラムが書き込まれているアドレス範囲を調べる必要がある。debugまたはreleaseフォルダからxxxx.mapファイルを検索して、エディタで開いて確認しましょう。
手順⑥:[Disconnect from the target]ボタンをクリックする。

【対処完了】

これで、STM32CubeIDEでST-Link-V2が接続できます。原因を排除したプログラムでデバッグ再開できます。

コメントを残す