STM32 Nucleo STM32F0722015年08月02日

STM32 Nucleo STM32F072 を買ってしまった。

STM32F072

Arduino 互換の pin ヘッダが用意されているのがいい。
Arduino Zero と同じ ARM Cortex M0 コアだが、メモリ容量が少ない。
同じ値段でもっと高性能なコアの Nucleo もあるが、Arduino Zero と同じ M0 コアで、FLASH (128KB) /SRAM (16KB) 容量が ATmega1284P と同じものを選んだ。
STM32F072 は、32-bit CPU で 48 MHz で動作する (Zero と同じ)。
Arduino Duemilanove 1284p は 8-bit CPU 16 MHz 動作だから、32/8, 48/16 の差から、CPU (演算) 性能で 10 倍以上高速だと思われる。

mbed は Web ベースの開発環境なので、ネットに接続できる環境があれば、そのまま使える。
複数のメーカからもいろいろと環境やツールが提供されている。
が、廻り者はローカル (自宅 PC) にフリーな開発環境を構築したいと思う。
Eclipse に ARM plugin を組み込むのだ。

おおまかな手順は、

1) Eclipse + CDT のインストール (すでにインストール済み)
2) Eclipse plug-ins (GNU ARM Eclipse Plug-ins) のインストール
3) toolchain (GNU Tools for ARM Embedded Processors) のインストール
4) デバッグ用ツール (OpenOCD) のインストール

になる。
詳しい手順は、GNU ARM Eclipse (http://gnuarmeclipse.livius.net/blog/) に示されている。
デバッグ用ツール (OpenOCD) については、

https://community.particle.io/t/tutorial-using-eclipse-st-link-v2-openocd-to-debug/10042?redirected=true

を参考にした。

パッケージの名前などに違いはあるが、問題なくインストールできた。
STM32Fxx templates を使って、サンプル・プログラム (C++ Project : STM32F0xx C/C++ Project -> Blink) を走らせてみる。

Include/Timer.h の 33 行目

  void // static を削除

Include/BlinkLed.h の 20,21 行目

#define BLINK_PORT_NUMBER               (0) // LED は Arduino Port D13
#define BLINK_PIN_NUMBER                (5) // PA5 (Port A の bit-5)

のように修正しなければならなかったが、動作することがわかった。

Eclipse ARM

ソース・コードのレベルでのステップ実行やレジスタ/メモリ・ダンプなどができる。
が、FLASH への書き込みができなかったり、Debug が起動できなくなるなどの問題が発生している。
調べる必要がありそうだ。

Arduino (15) Eclipse AVR plugin2015年07月18日

Arduino Zero が発売されたり、Arduino IDE が 1.6.5 (arduino.cc) になったり、Arudino の環境も少しずつ変化している。
このまま Arduino を追いかけるのもいいが、少し遠回りすることにした。

Eclipse IDE (CDT) で Arduino (AVR) の開発環境を構築する。
そのための plugin (Arduino Eclipse Plugin : http://www.baeyens.it/eclipse/) がある。
調べてみると、残念ながら Arudino IDE 1.6.x には対応していない。
もう一つ、AVR Plugin for Eclipse (Eclipse Marketplace) がある。
こちらを使ってみよう。
ただ、いずれも ARM のようなデバッグ環境は用意できないし、Arduino IDE のライブラリもそのままでは利用することはできないので、わざわざ新たな環境を立ち上げることは無駄に思える。
それでも、あえてそれに挑むのが「廻り者」だ。

http://playground.arduino.cc/Code/Eclipse
https://github.com/theolind/mahm3lib/wiki/Integrating-a-serial-output-window-with-Eclipse

の手順にしたがって、インストールする。

Shield-1 (キャラクタ LCD) を動かしてみた。
Project を Build して、AVR ボタンをクリックすれば、プログラムが upload され、動作する。

Eclipse AVR

Eclipse Shield-1 A

Eclipse で Arduino (AVR) の開発ができるようになった。

Arduino (14) WiFi シールド2015年06月21日

Arduino (arduino.cc) から Arduino Zero (Pro が付かない) が発売されたらしい。
すぐに手に入れたいところだが、そこは我慢して、もうしばらく Duemilanove 1284p で遊んでみようと思う。
前回作ったオーディオ・シールドも順調に動作していて(音質はよくないが)、E-Girls の曲を楽しんでいる。

今回は、WiFi シールドを作った。
といっても、SparkFun Electronics の CC3000 ブレークアウト基板を張り付けただけだ。
廻り者としては随分と手抜きしたものだと思うのだが、日本国内で無線通信を扱うには技術基準適合証明が必要なので、このような出来合いの物を使うほかない。

WiFi シールド

完成品の WiFi シールドを買っても良かったが、Micro SD を LCD シールドに組み込んだので省略したいのと、シールドを重ねたときに SPI の CS (Chip Select) が競合しないようにする必要があったのだ。
ところで、キャラクタ LCD ではデータ線 4 本が必要で、そのままでは I/O ピンが不足してしまう。
今後は、キャラクタ LCD を諦めて、グラフィック LCD を使うしかない (オーディオ・シールドの対応も必要だ)。

とりあえず接続テストをしてみる。
SparkFun のライブラリがそのまま使えるので、examples の中から PingTest を実行してみた。

        ---------------------------
        SparkFun CC3000 - Ping Test
        ---------------------------
        CC3000 initialization complete
        Connecting to: **********
        Connected!
        IP Address: ***.***.***.***
        Looking up IP address of: www.sparkfun.com
        IP address found: ***.***.***.***
        Pinging ***.***.***.*** 3 times...
        Pong!
       
        Packets sent: 5
        Packets received: 1
        Min round time (ms): 733
        Max round time (ms): 733
        Avg round time (ms): 733
       
        Disconnected
        Finished ping test

pin 接続を合わせ、SSID と password を書き換えただけで、インターネットに接続できてしまった。
振り返ってみれば、これまでほとんどコードを書いていない。
グラフィック LCD に日本語表示をさせたときくらいだろう。
次は、何かアプリケーションを作ってみたいと思う。

Arduino (13) Arduino Zero Pro2015年03月22日

Arduino Zero Pro が発売された。
即完売となり、次回入荷は未定だそうだ。

ところで、Arduino (arduino.cc) から Pro のない Arduino Zero が発表されてから久しいが、知らないうちに Arduino を巡って訴訟沙汰になっていて、この Arduino Zero Pro は、Arduino (arduino.cc) から分離した arduino.org から売り出されたもののようだ。

Zero も Zero Pro も、UNO, Duemilanove と同じ大きさで ARM Cortex-M0 コアのマイコンが搭載されている。
Due も ARM だが、こちらは MEGA サイズで Cortex-M3 コアのマイコンだ。
Zero/Pro のスペックは、32 ビット CPU で 48 MHz、FLASH 256 KB、SRAM 32 KB、3.3V となっている。
これまで、Duemilanove を 3.3V 化し、ATmega 1284P に差し替えて使ってきたが (8 ビット 16MHz/128KB/16KB)、Zero/Pro への乗り換えを検討した方が良さそうだ。

Arduino (12) オーディオ・シールド2015年03月15日

画像が表示できるようになったので、次に音声を出力してみたくなった。
Audio Codec LSI VS1063A を入手して、オーディオ・シールドをつくることにした。
回路は、データシートに載っている回路図から、LINE IN, MIC を省いたものだ。
SparkFun Electronics の MP3 Player Shield も参考にした。

毎度のことながら、SMD (Surface Mount Device : 表面実装部品) のハンダ付けには苦労する。

オーディオ・シールド

キャラクタ LCD シールドを重ねて使う。
MP3 ファイルのサンプル (track00[12].mp3) が用意されているので、Micro SD にコピーした。
アクティブ・スピーカを繋ぐ。

オーディオ出力

ソフトウェアは、SparkFun の Example Code (sketch) がほとんどそのまま使える (ピンの割り当てを変更するだけだ)。
sketch をコンパイル、アップロードすると音が出た。
鐘の音に続いて、ドラムの音が聞こえる。
オーディオ・シールドの完成だ。