OpenOCDのSWDモードを使ってstm32F0に書き込めない場合の対策

JTAGKEY互換のJTAGボードを使いOpenOCDでstm32F051に書き込みをおこなっている時にDMAで連続してデータを送信するプログラムを書き込んでしまうと次からプログラムが書き込めなくなる現象に遭遇した。

最初はリセットをかけるタイミングで何とかならないかと苦心惨憺してみたもののどうにもならなくて「CPU交換しかないか」と諦めて家に帰ったが、
家でふと「DMAのバス占有率が高くなっていることが原因なら書き込みのクロックを下げてみたらどうか?」と思いついて会社に来てから試してみたらビンゴ!

書き込みクロック500KHzを100KHzに変更してみるとすんなり書けてしまった 8-)

 

stm32CubeMX事始め

stMicro提供のライブラリにstm32CubeMXというのがある。
GUIでピン割り当てやインターフェースを設定出来て自動的にコードを生成してくれるというもので少し前から興味を持ってstm32CubeMXをインストールして
生成するプロジェクトをJDEのプロジェクトにインポートできるようにしてみたりしていたのだけれど本格的に使う気にはならなかった。

使うのを躊躇していたのは次のような理由からだった
1.ライブラリの構造が全く変わるので今までの開発資産が使えなくなる。
2.HALという名前のライブラリで高度な抽象化がされているので細かい操作が出来なくなったりリソースの無駄遣いになる(かもという懸念)。
3.stm32F4シリーズ用のライブラリしか提供されていなかった。

最近ローコスト版のCPUがありタッチセンシングが使えるstm32F0シリーズを使い始めてstm32F0シリーズのライブラリが必要になったのでSTマイクロのサイトを検索してみると殆どすべてのシリーズにstm32CubeMXのライブラリが対応していたのでstm32F051(Flash64K,RAM8K)でチャレンジしてみた。

とりあえずはデバッグ用にUSARTの送受信関数をHALを使って書き換えて動作するところまでこぎつけた、その結果stm32CubeMXはかなり使えそうな気がしてきた。

GUIで色々な設定が出来るのは便利だし、ドキュメント作成もたいへん効率的になりそうだ。

端子設定画面、FPGAツールのように端子の使い方をGUI画面で設定すると自動的に初期化のコードを生成してくれる。

stm32cubeMX1

 

stm32Fシリーズはクロック設定が柔軟に行える反面設定が判りにくいという難点があったがstm32FCubeMXを使うと次の通り簡単に設定できるし、stm32CubeMXのプロジェクトを保存しておけばクロック設定も一目瞭然となる。

stm32cubeMX_configClk

UARTの設定なども慣れるまでは難しいものだが次の画面で設定すると自動的に初期化コードを生成してくれる。

stm32cubeMX_configUart