(2019.4.9 作成)
(2020.11.22 更新)
このページでは中科芯杯(CKS)製のSTM32クローンであるCS32について紹介したいと思います。STM32のクローンとしては別途GigaDevice社のGD32というものもあるのですが、機能追加されているGD32と違いCS32は単なるクローンのようです。クロックがあげられないという話があるようで、もしかしたらSTM32の劣化版かもしれません。
しかも安価で有名なBluepill boardに搭載されているマイコンSTM32F103C8T6に合わせてCS32F103C8T6という名前で見た目もそっくりな基板が販売されていたりもします。
さて、なぜここでCS32の紹介をするかというと、単に管理人が間違えて買ってしまっただけなのですが、動かすのにひと手間必要だったため紹介しておこうと思ったまでです。
なおAliexpressで探すと本家STM32に対して数十円しか変わらず、また本家のSTM32に比べて性能が悪いという話もありますので、わざわざ敢えて怪しげなCS32を購入するほどのものではないと思います。
課題というほどの内容ではありませんが、例えばSW4STM32という開発環境でCS32をデバッグ実行しようとすると左のようなエラーメッセージが表示されてデバッグができません。内容としてはマイコンのIDとして 0x1ba01477を期待しているのに対して、 0x2ba01477という返事が来たという内容になります。
そこでこのページでは各種IDEでどう対策するかということを書いておこうと思います。
CubeIDEはバージョンによって若干対策が異なるようです。ここで紹介している方法はV1.5.0での対策になります。
やることは単純で右のDebug configurationsウィンドウを開き、Debug ProbeをST-Link(ST-LINK GDB server)からST-LINK(OpenOCD)に変更します。
管理人の場合これだけで動作しましたが、もしかしたらConfiguration Scriptを以下のSW4STM32と同じように設定しないといけないかもしれません。その場合はCubeIDEのインストールフォルダ(C:\ST\STM32CubeIDE_1.5.0以下からstm32f1.cfgファイルを探します。
まずCS32用にCPUIDを書き換えたcfgファイルを作成します。STM32用のファイルは"stm32f1x.cfg"という名前で保存されています。Ac6のフォルダから該当のファイルを探して見つけます。
管理人の環境では以下のフォルダにありました。バージョン番号微妙に違うかもしれませんが、似たような名前のフォルダに入っていると思います。
"C:\Ac6\SystemWorkbench\plugins\fr.ac6.mcu.debug_2.4.0.201902141520\resources\openocd\st_scripts\target"
このファイルを見つけたら"cs32f1x.cfg"などわかりやすい名前にして同じフォルダーに保存します。
保存したらファイルの中身を開き
set _CPUTAPID 0x1ba01477
の文字を
set _CPUTAPID 0x2ba01477
に変更して保存します。
set _CPUTAPID 0
の方がどんなCPUIDのものが来ても良いのでお勧めという話がありましたが、未確認です。これだと元のstm32f1x.cfgの方を編集するだけで次からCS32かSTM32かを区別する必要がないので楽ですね。
次にプロジェクトのフォルダにあるcfgファイルを編集します。"<プロジェクト名>_Debug.cfg"というファイルがあるので、これを同じフォルダーにコピーして"<プロジェクト名>_DebugCS32.cfg"などわかりやすい名前に変更します。
そしてこのファイルを開き、一番下の行の
source [find target/stm32f1x.cfg]
の文字を
source [find target/cs32f1x.cfg]
として変更します。このファイルが見当たらない場合は一度デバッグ実行をすると作成されます。
最後にメニューからRun -> "Debug configuration"を選んで右のウィンドウを出します。
このDebuggerタブにあるConfiguration Script をUser Definedに変更し、先ほど作成したプロジェクトフォルダのxx_DebugCS32.cfgにスクリプトを変更します。
これを行わないとデバッグ実行毎にcfgファイルが上書きされるのでうまく動かないです。
platform.ini内に
プロジェクトごとにこれらを行う必要がありますので、結構面倒です。このためクローンであるCS32を購入するのではなく、本家のSTM32を使用することをお勧めします。値段もあまり変わりませんので。
間違えて買ってしまった場合には作成済みのバイナリを書くだけならSTM32と同様にできるので、開発時はSTM32を使用し最後にCS32に置き換えるという使い方が良いと思います。