(日々の記録)デジタルオシロを買った。(土)STM32F107でやっとUSB仮想端末が動いた前回の記事以来、もう20日近くが経ってしまった。2012年の電子工作は遅々として進まない。他の事で忙しいというわけでもない。いうわけか意欲が湧いてこないのだ。とりとめもないことばかりに時間が過ぎて気分が乗らない。いわゆるスランプというやつだ。人生にはまだまだ時間がある(そうゆっくりもしていられないが)、たいした成果も上がっていないけれど備忘録を兼ねてこの間の経過報告をしておくことにする。DFUが動いてプログラムが書けた(1/16/2012)生基板からのSTM32プロセッサー基板がやっとのことで動いて、プロジェクトは次のステップ、ファームの開発に移った。統合環境Eclipseを立ち上げる。EclipseでのSTM32のソフト開発は、フォトフレーム以来ほぼ1年ぶりだ。半年前にはFreeRTOSをやっていたが、同じARMでも石はNXPのLPC2388で微妙に環境が違う。情けないことにEclipseはともかく、STM32のプログラミング環境などは見事にみーんな忘れていた。リハビリのつもりで、少しづつ以前のプロジェクトのソースコードを見ながら、ブートローダーから先の手順をゆるゆると進める。CPUは、前の騒ぎでSTM32F103に戻ってしまっている。103と107はピンコンパチで、こんどのグラフィック気圧計は、特に107でなくてもかまわない。100ピンのCPUの換装はおおごとだ。103のままプロジェクトを進めることにする。CQ-STARM基板の状態にもどそうと、ブートローダーからDFUを焼くことにする。ファーム書き込みの手段は増やしておきたい。中華シリアルプログラマー、MCUISPは好調だが、いつ何時動かなくなるかわからない。STマイクロ純正のライターFlushLoaderは、103に戻したら動かなくなっている。用心に越したことはない。4年も前になる付録の雑誌号を引っ張り出して全体を復習する。DFUそのものは、以前ねむいさんのところから頂いたソースを使う。MCUISPは快調にプログラムを書き込んでくれるが、一向にUSBが動かない。PC側のプログラマーDFUseが基板を認めない。そのうち、DFUモードというのがあって、I/Oピンのひとつをグランドに落とさなければDFUにならないことに気づいた。基本的なところをすっかり忘れている。PB9を1kΩでプルダウンする。このソースがこのピンで良いのか確認するのにえらい時間がかかった。考えてみれば、このDFUはCQ-STARM基板用なので確認する必要もなかったのだが、何しろ昔のことで周りがすっかり見えなくなっている。最初、動かなかったが、何度かUSBを抜き差ししたり、リセットを押しているうちに、PCのディバイスマネージャーのところにDFUのアイコンが出た。コネクターに抵抗を差し込んでいたのが接触不良だったらしい。DFUseを立ち上げると、ちゃんとボードを認識した。このあとも難儀が続いた。DFUで適当なプログラム(仮想UARTモニター)をファームに書き込んだのは良いのだが、このプログラムが動かない。さっきのピンをはずしてもプログラムモードに行かないのである。これも、このピンをプルアップしなければならないことを忘れていた。Vccから1kΩをつないで無事、USBを通した仮想UARTモニターが動いた。やれやれ、これで一段落である。¥450のCPUボードがやっと日の目を見た。103から107へまた換装しなければならない(1/19/2012)勢い込んで、ねむいさんが最近、集大成してくれた、STM32ファミリーでこのTFT液晶が動くソースコード一式をネットからダウンロードした。当初はスクラッチからTFT液晶のコマンドレベルのドライバーを書こうと意気込んでいたのだが、ウェブで上記のソースを見つけた途端、意欲が一気に失せた。へそ曲がりではあるが、意気地のないへたれである。先人が苦労して作ったものを使わない手はない。何も無理をすることはないと勝手な理屈をつけて、ありがたくソースを頂戴する。このソースは、ChaNさんのFatFSが入っており、ファイラーにもなる。ハードはまだ未配線だがビルドだけでも通してみようとEclipseにソースチェーンを展開して、コンパイルの準備をする。このソースは、107用のソースなので103向けに換えてやらなければならない。MakeFileで103の環境変数を設定する。makeは何故か最初のところで門前払いである。ファイルではなくコマンドがないと怒っている。悩んでいたが、MakeFileに新しく追加されていたシェルの置換ステートメントを訳わからずにコメントアウトしていたことがわかり、これをはずしてやっとコンパイルが進み始めた。いくつかのライブラリ定義漏れを修正して、これは通りそうだと思っていたら、見かけないエラーでビルドが止まった。エラーメッセージを読む。あっちゃー、フラッシュサイズオーバーだ。このTFT液晶+FatFSモデルは、要求メモリとSRAMが大きく、フラッシュ128KB、SRAMが20KBのSTM32F103VBT6では動かないことがわかった。「振り出しに戻る」というやつである。つけて正常に動いていた103をはずすしかない。107に移し変えなければ先に進めない。3回目のLQFPのハンダ付けはさすがにきつい。一度外した面実装のICチップは、ピンをいくら目視で揃えても、あちこちが微妙に歪んでいるので、ハンダ付けをルーペで見直すと、冷や冷やするところが続出している。下手にやり直すのは危険だ。前やったようにパターンごとはずす恐れがある。この基板は安いだけあって、パターンが弱い。それでも、どうしようか迷うところが数箇所ある。ハンダ付けは問題ないようだが、ピンと隣のパッドが近接して危ない。何度もルーペを換えてチェックしたが、結局そのままにすることにした。テスターでショートだけはしていないことを確認する。よーし、ブートローダーまでは通った。各ピンが本当につながっているかどうかの確認は実際にそのピンを使ってみないとわからない。STマイクロのUSBライブラリが大きく変わってしまった。(1/20/2012)103のときと同じ手順で先に進む。DFUのソースをSTM32F107で動くようにMakeFileを調整する。何とかビルドが通った。順調にMCUISPと、フラッシュローダーが107を認め、DFUの書き込みに成功した。DFUSeが107で動いた。ねむいさんが以前ブログで指摘していた107のブートローダーのERRATAは幸い発生しなかった。何もペリフェラルをつないでいないからだろう。次はDFUそのものの動作確認である。103で動いたUSB仮想端末モニターのファームをロードしてみた。何の問題もなく書けた。PCでは不明なディバイスと表示されるところまで動くが、仮想UART端末としては認めないのである。動かない理由はすぐわかった。USBライブラリが古すぎて107では動かないのだ。2年前に開発したUSB仮想UARTモニターは、雑誌についていたSTマイクロのUSBライブラリV1を使っている。107はV1では動かない。それなら仮想UARTモニターのUSBライブラリを107が動くV3に換えれば良さそうなのものだが、これが難しい。STマイクロのUSBライブラリーはV1からV3で、大きく変わっている。いうより、103と107では、USBそのもののハードが変わっていて(107はUSBのOTG機能が追加されている)、ユーザープログラムで使っていた関数や変数が殆ど変更されている。ライブラリを単にV3にしただけでは、次から次に未定義エラーが出る。なると意地になるのがいつもの癖である。冷静に考えれば、元々は気圧計のためにSTM32F107を動かそうとしている。そこでUSBが動こうが、動くまいが本筋とは関係ない。やめて本来の開発に戻れば良さそうなものだが、これが出来ない。103で快調に動いていたダブルバッファーを使った仮想UART端末が新しいチップで動かない(動かせない)というのが、しゃくなのである。このまま放置して先に進めないのだ。このへんがアマチュアの特権である。やりたいようにやる幸せ(?)をかみしめて、こだわることにする。Eclipse上で苦闘する。未定義変数を検索して必要なドライバーを探す。Eclipseのサーチ機能は強力なので、どこで定義しているかはすぐわかる。あれえ、ちゃんと定義されているのにエラーになる。