GNU環境でやっと仮想COMポートが動いた(5/3/09)STM32開発のその後の進展は、はかばかしくない。LEDの点灯までは動いたが、USBからのレスポンスは全くないままだ。PC側からはVirtualComPortとしてポートが見えるのでUSBの初期化はうまくいっていると思われるが、その後が進まない。ソースは「蛙がピョン」のオリジナルのままである。「*」を入れると3軸の加速度を表示するはずだが、全く表示しない。ソースの中にデバッグ用と見られるいくつかのコマンドがあるので(「?*」でバージョン表示、「Q*」でリセットなど)入れてみるが、それにも反応がない。main.cに手を入れて無条件でメッセージをUSBに出力するステートメントを加えたが、反応なし。LEDを点灯したあと暴走している感じだ。ここでJTAGインターフェースが使えれば、もう言うことなしなのだが、デバッガーの設定はプロジェクト単位にする必要があり、今のところは全く手が出ない。入れても何をデバッグしているのかわからないだろう。頼みはやっぱりウェブによる先人たちの経験報告である。Makefileを貰ったサイトでは、動いているように書かれているが、同じWINARMを使って仮想UARTを動かそうとしているサイトではGNUでは動かないというレポートが多い。あるサイトで「STM32はThumb2命令で動くので、ARM命令で作った標準ライブラリは駄目」とあるのを見て、慌ててCodeSourceryのディレクトリチェーンから、それらしいライブラリパスを指定して(gcc/arm-none-eabi/libからgcc/arm-none-eabi/lib/thumb2)みるが、前と同じ。リンクエラーをなくすためにライブラリのスタブルーチンを入れたことが原因だろうか。それに関連して、断片的な記述で良くわからないが、sprintfを入れようとしてsyscalls.cを要求され開発をあきらめたというこの記事がどうも気にかかる。いえばこのあいだのスタブルーチンの説明にも、syscallsを作るとか何かという話があったことを思い出した。念のため、ターゲットのコードを見てみる。何と、sprintfが加速度を表示するために使われているではないか。したらこれが原因かもしれない。一度、スタブルーチンを入れろと言った記事を詳しく読み直す。「sprintfは、一時メモリをmallocで取るので、これを使うときは、_sbrkだけはまともに書け」とあるではないか。_sbrkのエントリーは今度のダミールーチンに入っていて何もしていない。正しい作り方が良くわからないので、とりあえずこのsprintfの部分をコメントアウトしてmain.cを適当に作り替え(キー入力をループバック)、ビルドし直す。今度は少し動くような予感がする。hexファイルをdfuファイルに変換し(結構面倒だ)、Dfuローダーで書き込む。ピンを差し替え(早くJTAGにしよう)、USBソケットを抜き差しし(うーむ気があせる)、PCのTeraTermを起動させ、仮想COMポートを選ぶ。TeraTermからは文字化けしているが連続して文字が出てくる。思ったようには出力されていないが、始めて仮想COMポートが動いた瞬間だ。何度も書いているが、この快感がたまらない。いや、やっぱり相当中毒が進んでいるか。行末のNULLキャラクターを調整して、とりあえずキーボードからの入力を忠実にエコーバックする仮想端末が完成した。USBソケットを抜き差しすると端末がCOMポートを認めなくなったり、最初のウェルカムメッセージが想定どおり出ないなどの不具合は残っているが、これでSTM32の開発環境は大きく前進した。端末からターゲットの状況が手に取るようにわかるモニター機能は、これからの機能の開発には欠かせないからだ。心電計プロジェクト:スケールが出ると心電計らしくなる(2015.01.08)心電計プロジェクト:TFT液晶に念願の心電波形が出た(2014.12.18)心電計プロジェクト:STM32F103の心電波形表示で悪戦苦闘(2014.12.03)心電計プロジェクト:CooCoxでARMの表示系ソフトを開発する(2014.10.16)心電計プロジェクト:表示部のARM基板の開発環境を一新する(2014.09.19)コメントコメントありがとうございます。本文にもありますように今のところDigiKeyという海外通販が一番有力です(アマチュアではこれ以外は考えられない)。http://dkc1.digikey.com/jp/ja/digihome.html日本語が通りますし、みなさん利用しておられます。送料が一律¥2000と高いので送料が無料になる¥7000以上の買い物をしないと割高になります。チップは本文にもあるKSZ8721BL以外にもナショセミのDP83848Cが、DigiKeyで一個売りしてくれるようです。トランシーバー」などのキーワードで根気良くGoogleすると出てきます。その型番でDigiKeyの商品検索をかけると良いでしょう。"LAN8187"で検索してたどりつきました。この別売りのLAN&SDカード拡張基板の自作を企んでいる。今度も恐らく誰かが私と同じようなことをしようとしているに違いないはい、私も企んでいます(笑)チップを取得する方法の情報など探していますがもし何か情報あれば展開していただけるとありがたいです。今後もちょくちょくブログ拝見させていただきます。22時16分ご助言ありがとうございます。こちらの環境では、特にvolatileをつけてもつけなくても変化はなく、USBとの送受信は一応出来ています。困っているのは、雑誌の「蛙がピョン」のファームがUARTの入力(PCからのデータ)を正しく処理できておらず(2文字以上の入力を受け取れていない)、送信も良い加減で、お手本にならないことです。この作者はUSBが非同期で動いていることを理解していない。オリジナルのVCPソースを見て解析中です。22時51分はじめまして。氏のSTM32の記事に目がとまりましたので少しご助言を...。私もGNU-CでVCPの移植を試みたことがありましたが、gcc4.3.2以上の環境で最適化を掛けるとcount_outと言う変数が最適化で消されてしまい、UARTが送信されなくなります。変数宣言の前にvolatile修飾子をつけることにより、この問題を回避することが可能です。11時07分サイト運営し始めた者なんですが、相互リンクしていただきたくて、コメントさせていただきました。http://hikaku-lin.com/link/register.htmlこちらより、相互リンクしていただけると嬉しいです。未熟なサイトですが、少しずつコンテンツを充実させていきたいと思ってます。03時13分コメントを書く名前:メールアドレス:(ウェブ上には掲載しません)アドレス(URL):この情報を登録するコメントは記事投稿者が公開するまで表示されません。STM32のUSB仮想UARTモニター遂に完成。