« Arduino - ArduinoによるAVRライターとATmega328P再換装 | トップページ | Proce55ing - CircleCubes »

STM32 - Primer2

おけましておめでとうございます。

去年買っておいたSTM32-Primer2ですが、新年早々遊んでみました。

Stm32p2

2というからには初代があるわけですが、円形という嵩張る形にインターフェイスも乏しい(ボタン1個に加速度センサーにLCD)もので、出た時は無視しちゃってました。
ペリフェラルに対してARMがオーバースペックというか・・・

2が出ていたのを本当に最近知ったものだから、そのスペック見て早速注文。
先月届きました。

取り敢えず起動まで。

stm32circle.com

STM32 Primer2ユーザーズ・ガイド(私家版)

Stm32p2b

パッケージ。

 

Stm32p2c

同梱物。このまま入っていて、緩衝材とか一切ありません。発送だとかなり不安。

実際、液晶がずれていたのですが、このくらいはご愛嬌。バラして元に戻しました。液晶はケーブルで接続されているだけで固定されてないのでテープで固定。

 

電源を入れるには裏蓋開けて、電池側のジャンパを接続しておきます。

Stm32p2d

基板のバージョンは v1.2 です。

スティックを押すと電源が入り、電源オン時にスティックを押しっぱなしにすると電源を切ります。(また、メニューから選択)

 

Stm32p2e

起動成功して、Arduinoと比較してみました。

大きいですね。でも、様々なデバイスを積んでいて、スタンドアロンで十分遊べます。

この時点で既に加速度センサーは働いていて、画面上の青い丸が傾斜によって動きます。

更に、本体を直角に回転すると、上下を判断して画面自体が切り替わります。

例えば上の画像は横にしてますが、これを縦にすると、それに合わせて向きが変わるのです。

メニューなどの操作もスティックによる操作だけでなく、傾けるだけで項目が移動します。ちょっと使い難い。

搭載デバイスをうまく利用してアピールしてますね。

 

Stm32p2f

分かりにくいですが、縦向きにしてます。

バージョン表記(メニューのAbout)ですが、CircleOSは最新の v3.8 になってました。
アップデートする必要はないですね~

Appは登録されているアプリケーションの数で、既に19個も初期状態で入ってます。

 

メニューからコマンドを実行すると各アプリケーションが起動します。

こういう利便性はさすがOSを積んでいるだけありますねえ。

FLASHが512K、RAMが64Kって素晴らしい。何も考えずに開発出来そうsweat02

問題となりそうなのはデバッグでは32Kまでという点。とはいえ、そこまで大きな物を作ることは滅多になさそう。と思ったら、あくまでもメモリ上のアドレス空間での話なので、OSの領域を考慮すると実際には多くはなさそうです。

 

開発環境はARM用の Ride7 というIDEが用意されています。

オマケ的なもんかと思ってましたが、結構しっかりしたIDEでカスタマイズもそこそこ出来ます。そりゃあSTM32シリーズまかなっているのですから当たり前ですよねえ。

Ride7のバージョンは 7.24.09.0251 で、RKit-ARMのバージョンは 1.22.09.0254 となってます。

Ride7ide

 

ついでなので、HelloWorldでも作りましょう。

Fileメニューの New → Project を実行すると以下の画面が出るので、プロセッサに「STM32_Primer2_CircleOS」を選択し、プロジェクト名を決めます。

Ride7newproj

出来上がったプロジェクトには初期状態で幾つかのファイルが登録されていて、Application.c がメインとなるソースになるようです。その他はOSやFATをリンク用する為のバイナリです。

その中には既に

  • enum MENU_code Application_Ini(void)
  • enum MENU_code Application_Handler(void)
  • static enum MENU_code MsgVersion(void)

という3つの関数があります。

Application_Ini() はアプリケーションの初期化で、デフォルトでOSのバージョンチェック処理が入ってます。

アプリケーションスケジューラで呼び出されて、最初に実行される部分です。

必要な場合は、自分で初期処理を追加します。画面描画を行うならDRAW_Clear()くらいは入れておきましょう。

 

Application_Handler() はイベントハンドラ?で、定期的に呼び出されます。

色々なイベントに対する処理などを記述するようで、Windowsで言うところのCreateWindowのlpfnWndProcで登録するメッセージ処理関数みたいなものでしょうか。

ここはSystickの周期により呼び出され、後述するアプリケーションの返り値が MENU_LEAVE になると終了します。

唯一ある処理がボタン処理で、以下のようになってます。

if(BUTTON_GetState() == BUTTON_PUSHED)
{
    BUTTON_WaitForRelease();
    return MENU_Quit();
}

これはスティックが押されたら、離されるまで待機し、終了する、という流れ。

MENU_Quit()関数は予め用意されているようで、中身はどうなっているのだろう? 現在のメニュー(自分)を終了し画面をクリア、そしてMENU_LEAVEを返すというものです。(CircleOS - MENU_Quit()

とりわけ最初のうちはここからプログラミングしていくと良いかもです。

 

MsgVersion()アプリケーションの情報など記述するところ?らしく、初期化時のOSへの返答値としても使われています。 OSのバージョンチェックでエラーとなった場合のメッセージを表示します。

この中でRTC_GetTime()によるループがありますが、4秒間のウェイトのようです。つまり、エラーメッセージを4秒間表示したらアプリケーションを終了してOSへ戻ります。

また、Application_Nameでアプリ名を設定しますが、8文字までとなってます。

 

ここまでで気になったのは関数の返り値で MENU_code というenum値を返しているところです。

定義については circle_api.h に書かれていて、親切にコメントが付いてます。

これはOSに対してアプリケーションがどういうステータスを取るかなどの報告するようなものらしく、CircleOSアプリケーションからOSへ返す流儀みたいなものでしょうか。

例えば MENU_CONTINUE だと処理を続行し、MENU_LEAVE だと終了するようOSに伝えます。

 

ハードウェアでHelloWorldと言えば、通常ならLEDピカピカといきたいところですが、OSがある上にLCDまであるので、ここは文字列を表示してみましょう。

Application_Handler内の // TODO: Write your application handling here. というコメントの下などに、

const char msg[] = "Hello, World!";
DRAW_DisplayString(8, 22, msg, sizeof(msg));

を追加します。

DRAW_DisplayStringの第1~2引数はXY座標(文字単位? Xは8dot、Yは11dot単位)、第3は文字列、第4が文字列の長さとなります。

Projectメニューの「Make Project」や「Build Project」を実行してコンパイル。

ログに Build successful が表示されれば成功です。

 

Primer2とPCをUSB接続(DEBUG用の端子)して Debugメニューの Run を実行すれば、プログラムが転送されデバッグが開始されます。

アプリ名が初期のままなら、Primer2のメニューには「My App」が出てきます。

これを実行すれば Hello, World! という文字が表示されます。(残念ながらその時のスクショを撮り忘れました。というより撮る前にショートさせてしまった・・・後述へ続く)

 

それから一度転送すると既に登録されていたアプリが全て消えてしまうのですが、転送するアプリだけ登録するにはどうしたら良いのだろう??

それに19個のアプリはどうやって登録したのだろう?MicroSD経由?その辺はいろいろと調べる必要がありそうです。

 

取り敢えず元に戻すだけなら、出荷時のイメージを書き戻します。

Ride7のインストール先 Ride\lib\ARM\CircleOS に移動し、コマンドラインから

>Cortex_pgm TSTM32F103VET6 E PPrimer2_Circle_Factory.hex S

を実行するか、Restore_Primer2_Circle_Factory.bat を直接実行で出荷状態のバイナリを転送してくれます。

 

所感としては、CircleOSという土台とライブラリのおかげで、コーディング量が非常に少ないという点に尽きます。

逆にバイナリが増えますが、大規模なアプリを作るなどの話は別として、Primer2とCircleOSのみを利用するのであれば有り余るメモリと共に効率的な開発が出来るのではないでしょうか。

それにしても国内のユーザー少ないなぁと思っていたら、STM32自体は多いんですよね。Primerだけだと伸びないかなあ。でもこれ、それだけで終わってしまいそうな予感が。。。

 

 

2010/1/5追記

使い始めてわずか・・・壊れてしまいました(;ω;)

厳密には1日ほどしか使ってないのに何故壊れたのかというと、レギュレータICが弱いらしく、ちょっとした過剰電圧などでいってしまうとか。

電源ピンがちょっと曲がっていたのでペンチで戻そうとしたら、うっかりビリっとショート。

それからは電源を入れてもすぐに降下して消えてしまいますが、3.3Vを流すとちゃんと動作するので電源以外は生きているようです。

USBから供給するとLCDが点いてはゆっくり消えの繰り返しです。

知ってはいたのですが、こんなにあっさりいってしまうとはつゆしらず、基板自体のバージョンが上がってもL6928Dを使用している限り電源周りのリスクはありそうです。

一応 U9 と U17 周辺の写真を載せておきます。

Stm32p2_u9(U9)

Stm32p2_u17(U17)

PS3とLinux、電子工作も」(Todotaniさん)や「ねむいさんのブログ」(ネムイさん)のサイトなどを参考に修理してみたいと思いますが、違う基板だし代用品で治せるかちょっと自信ないですsweat02

 

2010/1/20追記

修理しました。 Primer2 レギュレータ修理

|

« Arduino - ArduinoによるAVRライターとATmega328P再換装 | トップページ | Proce55ing - CircleCubes »

電子工作」カテゴリの記事

コメント

管理者様

突然のメールにて失礼致します。
当方、STM32マイコンをテーマにしたホームページ( http://miqn.net )を制作・運営いたしております川内と申します。
このホームページははSTM32マイコンを題材に、開発環境の構築方法やRTOSの利用方法を解説しているホームページです。もともと書籍として刊行する予定で執筆しておりました原稿の一部をホームページで無償公開しております。また関連する動画も掲載中です。
インターネットで検索を致しておりましたら、貴ホームページにSTM32に関する記事が掲載されているのを拝見いたしました。ご迷惑でなければ相互リンクをさせていただきたく、このメールを差し上げた次第です。
勝手ながらこちらのリンクページには、先だって貴ホームページへのリンクを掲載させていただきました。ご迷惑であれば削除させていただきますのでお知らせください。
http://miqn.net/node/38
リンクを掲載いただけます場合には、「STM32マイコン徹底入門」というホームページ名をアンカーテキストとして、「 http://miqn.net 」にリンクを設定いただけますと幸いです。
勝手を申しまして恐縮ではございますが、是非ともリンクをお願いいたしたく、よろしくお願いいたします。

miqn.net管理人
川内康雄

投稿: 川内康雄 | 2010-06-06 16:27

川内康雄様、はじめまして。

この度は当サイトへリンクして頂けるということで、わざわざお知らせ頂き誠にありがとうございます。
拙い内容ではありますが、掲載して頂けることを嬉しく思います。

早速サイトを拝見致しましたところ、STM32について詳細な内容は大変助かり、今後参照させて頂きたいと思います。
当方でもリンクを張らせて頂きますので、今後とも宜しくお願い致します。

投稿: SatE-O(サテヲ) | 2010-06-06 17:47

リンクいただきましてありがとうございます。御礼が遅くなりまして失礼致しました。
今後ともよろしくお願いいたします。

投稿: 川内康雄 | 2010-06-24 18:28

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/204580/47189947

この記事へのトラックバック一覧です: STM32 - Primer2:

« Arduino - ArduinoによるAVRライターとATmega328P再換装 | トップページ | Proce55ing - CircleCubes »