DWM誌付録基板 CQ-STARM に書き込まれていた DFUを消してしまったので IAR Embedded Workbench v5 で DFUをビルドして書き込もうと思ったら、DWM誌 2008/05号のふろくCD-ROM に入っていた DFU のソースプロジェクトは IAR Embedded Workbench v4用であった。
そこで STM32 の Application Note のページを見てみたら、
UM0424 STM32F10xxx USB developer kit (USB関係ライブラリ&DFUを含むデモプログラム)が 2008/05/23 あたりにアップデートされ v2.0になった。いくつかバグ修正があるようだ。
(ダウンロードしたらインストーラ形式のexeだった。これはただのアーカイブファイルにしてくれたほうが、たとえばGCCで開発したい人なんかは、ありがたいのだが・・・)
(※ 2008/05/31 う、 v2.1になってる… version.txt 見ると、 DFUの アプリケーション書き込み済みチェック処理をちょびっと変更しただけ、らしいが。)
Ver 2.0 は、ちゃんと IAR Embedded Workbench v5 対応のプロジェクトもついている。
(といっても大きな違いは stm32f10x_vector.c の リセットベクタで呼びだす処理が
v4は __program_start()
v5は __iar_program_start()
それだけみたいだったが。プロジェクトファイル自体は IAR Enbedded Workbench が変換してくれるから)
IARでビルドしてみたが、プロジェクト設定がちゃんとなってないみたいで、buildしたら cortexm3_macro.s で「そんな命令無い」と怒られてしまった。 これは Project → Options → Target で ST STM32F10x を選べばOK。
Ver 1.0 にはなかった Custom_HID っていうデモが増えている。
くっ・・・Ver 1.0を参考にしながら HIDでデータ転送するプログラムを作って、やっととりあえず動いた、と思ったところなのに!まあいいか…。
USBのディスクリプタが、Ver 1.0では const なしで定義されていてRAMを食ってしまいもったいなかったが、Ver 2.0 では const つきで ROM に配置されるように修正されていた。
http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/index_cortex.html#stm32_blink
からもらってきた、LED Blink Example for STM32F103 の cortexm3_macro.s と FWlibの stm32f10x_vector.c 、それとリンカスクリプト あたりを参考にして、Codesourceryの arm-eabi GNU-toolchain でコンパイルしてみた。
IARと比べてちょっとバイナリサイズが大きくなってしまう。特に usb_regs.c がひどい?
同梱の FWLib (STM32の周辺機能用ライブラリ)もv2.0になっていた。
Flash 256KB~の「High-density devices」サポートが加わった。(CQ-STARMに載っている Flash ~128KB品は「Medium-density devices」)。しかし、#ifdef で分けられたりはしていないので、Medium-density devices しか使わない向きには、かえってライブラリサイズがでかくなってしまって、あまり気分が良くないかも。
また、v1.0用に作ったプログラムがそのままでは動かない変更点もある。
たとえばUSARTでは 初期化用の構造体が変わってる。
タイマは、TIM1のみが高機能なので、v1.0では TIM1とその他タイマ用のライブラリが分割されていたが、v2.0ではまとめてある。
組み込み用途なんだから、ライブラリはもっと細かく分割してほしいんだけど…。
DFUって、STが適当に名前をつけたのかと思っていたら、
USB DFU Class (usb.org PDFファイル)ってのがちゃんとあるんですね。し、知らなかった…。
これ、STは自前のドライバを用意しているけれど、Windowsにはクラスドライバついてないんだろうか?
→ついてないみたいだな…クラスドライバがOSについてこないクラスじゃ普及しないよね?
コメント