STM32F103C8T6 クローン の Blue Pill を STM32CubeIDE で使うための覚え書き

STマイクロ社 の STM32F103C8T6 を使った Blue Pill というCPUボードがある。
Aliexpressなら200円ぐらいで買える。たまに電子工作で使っている。

f:id:nuko-hut:20200826235228p:plain

STM32F103C8T6 はクローンCPUが存在している。
クローンCPUと説明して売っているショップは良いのだが、
説明の無いショップだと届くまでわからない。
安いところから買うと高確率でクローンCPUと思われる。

クローンCPUでもプログラムを書き込んで動かすだけなら問題ない。
問題は STマイクロ社が無償公開してる開発環境の STM32CubeIDE を使用時。
デバッグプローブ を ST-LINK GDB server にするとデバッグでエラーが出る。

デバッグの構成f:id:nuko-hut:20200826231618p:plain

エラーメッセージ

f:id:nuko-hut:20200826231421p:plain

原因は先人達が調査済み。
CPU IDがオリジナルとクローンで異なるため STM32CubeIDEがエラーを出す。
オリジナルのCPU IDは 0x1ba01477
クローンのCPU IDは 0x2ba01477
真似するならキッチリ真似して欲しい。
大陸の人達はいろいろと中途半端。

対策方法は先人達が教えてくれている。
方法はSTM32CubeIDEをインストールしたフォルダの中にある stm32f1x.cfg というファイルの中を変更する。
インストールをデフォルトの設定で行っている場合は以下のフォルダ。
C:\ST\STM32CubeIDE_1.3.0\STM32CubeIDE\plugins\com.st.stm32cube.ide.mcu.debug.openocd_1.3.0.202002181050\resources\openocd\st_scripts\target

変更方法は2種類あった。

1つ目の方法は58行目の
 set _CPUTAPID 0x1ba01477

 set _CPUTAPID 0x2ba01477
に変更。

この方法はオリジナルとクローンでCPUに合わせて stm32f1x.cfg の変更が必要。
変更しないで済む方法がもう1つの方法で62行目の
 swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID

 swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id 0
に変更。

CPU ID を無視するのでオリジナルとクローンで stm32f1x.cfg の変更が不要。
私は後者の方法にしている。

クローンCPUは stm32f1x.cfg を変更しても ST-LINK GDB server は使用不可。
OpenOCD を使用することになる。 

デバッグの構成f:id:nuko-hut:20200826235355p:plain

中華 ST-Link V2 を使用する場合

 f:id:nuko-hut:20200826235314p:plain

モードのリセット:Software system reset の設定が大事。
(電子工作専科さんに感謝)

リセットがうまくいかないとエラーが出る。f:id:nuko-hut:20200826231328p:plain

タイミングを見てリセットスイッチを連打するとなんとなるとかならないとか。

Black Pill というCPUボードでも STM32F103C8T6 を使っているが
クローンCPUを使っているというネタを見たことが無い。
なんでだろう?