preload
8月 17

72MHzで動作可能なARMのCortex-M3プロセッサ、及び多彩な周辺機能を搭載したマイコンSTM32の開発環境をMacの上で構築してみようと思います。

基本的にこちらマイコン徹底入門を参考に進めていき、Mac(というかUNIX)特有の変更点に重点を置いて解説していきます。

これらのセットアップをする前にMac OSXのセットアップディスクからXCode(開発ツール)を事前にインストールしておいてください。

Mac OSXではDFU経由での書き込みはできません。JTAG経由のみの書き込みとなるのでJTAGデバッガが必要です。

セットアップする環境一覧

  • GCCによるARMのクロスコンパイル環境
  • Eclipseを用いた統合開発環境
  • OpenOCDとJTAGを用いたデバッグ

セットアップ手順

GCCによるARMのクロスコンパイル環境

まずはコードをARMプロセッサで実行するためのバイナリにコンパイルするツールをインストールします。

本来はGCCを一からコンパイルしてセットアップするのですが、Mac上でARMのクロスコンパイルをするためのバイナリが用意されているのでそれをダウンロードしてきます。

上記のサイトにアクセスし、リストの中からdevkitARMのMac版の最新バージョンをダウンロードして下さい。執筆当時はdevkitARM_r31-osx.tar.bz2でした。

ダウンロード後は解凍し、解凍してできたディレクトリを/usr/local/devkitARMにコピーしてください。

そして、PATHを通すために~/.bash_profileファイル(無ければ新規作成し)、次の一行を加えてください。

export PATH=$PATH:/usr/local/devkitARM/bin

これでgccのセットアップは完了です。ターミナルで、

arm-eabi-gcc -v

とコマンドを実行すると次のスクリーンショットのようにGCCのバージョンが表示されれば成功です。

arm-eabi-gcc -v

arm-eabi-gcc -v

Eclipseのセットアップ

Eclipse CDTのセットアップ

実は以上でSTM32向けのコードをコンパイルすることはできるのですが、統合開発環境があると作業が進めやすいのでEclipse(CDT)を用いた統合開発環境を構築します。

まずはEclipse CDTをインストールします。

Eclipse CDTのダウンロードページからCDT 7.0 for Eclipse Heliosをダウンロードします。(執筆当時の最新バージョンです)

Eclipse packageのリンクをクリックすると、

Eclipse CDT ダウンロードページへのリンク

Eclipse CDT ダウンロードページへのリンク

次のようにプラットフォームの選択画面が出ます。ここで、もし64bit対応のMac本体であればMac OSX(Cocoa 64bit)を、そうでなければ32bitを選んでダウンロードしてください。

Eclipse CDT プラットフォームの選択

Eclipse CDT プラットフォームの選択

ダウンロードし、解凍してできたeclipseディレクトリをApplicationフォルダにコピーします。

そして、コピーした先のEclipse.appを実行してください。

起動時にworkspaceの場所を聞かれますがデフォルトのままで構いません。ここで指定したディレクトリにソースコード等が保存・配置されることになります。

Embedded CDTのインストール

それでは次に組み込み開発向けのプラグインをインストールします。

EclipseのHelpメニューから….となるのですが、あまりにも前述のマイコン徹底入門とかぶるので作業の必要なページを列挙しておきます。

ただ、どうやらEclipseからRxtxをインストールするとエラーでうまく行かないので、Rxtxの公式ダウンロードページからrxtx-2.1-7r2のソースコードをダウンロードして、configuremakesudo make installを実行して手動でインストールしてください。

OpenOCDとJTAGを用いたデバッグ

FTDIのライブラリのインストール

以下、鋭意執筆中…

関連するタグ:
3月 04

AVRには外部クロックがなくても動作するように、ICの内部にRC発振回路によるクロックを内蔵しています。

工場出荷時に規定の周波数(基本的に8MHz)になるように校正されていますが、データシートによると10%までの誤差がある可能性があり、シリアル通信では致命傷になります。

そこで、個別に調整できるようにOSCCAL(発振校正レジスタ)が存在します。このレジスタをプログラム実行時に書き換えることで発振周波数を変更できます。OSCCALが大きいほど高い周波数で、小さいほど低い周波数で動作します。

AVRはヒューズビットのCKOUTをプログラム(0)することにより、CLK0端子からシステムクロックが出力されます。これを測定機器で観測しながらOSCCALレジスタを操作することによりクロックを調整します。

続きを読む »

関連するタグ:
3月 04

シフトレジスタ(74HC595)の使い方という以前の記事において、汎用IOポートをソフトウエアで制御してシフトレジスタ(74HC595)を操作するというのは実験しました。
ですが、この方法ではプログラムサイズも大きくなり、動作速度も遅くなってしまうという問題があります。
そこで、今回はAVRに搭載されている周辺機能であるSPIを使い、ハードウエアでシリアルデータとクロックを送出するようにしてみたいと思います。
どれぐらいのコードサイズの削減動作速度の向上が出来るかを実験してみます。

続きを読む »

関連するタグ:
6月 03

今回はさまざまな用途に利用することの多いPWMをAVRから出力することについて書きます。 PWMとはなに?という方も参考にしてください。 最初から最後までわかりやすく解説するのが目標ですが、抜けていたり飛躍している箇所がたくさんあります。 コメントで指摘していただけるとたいへんありがたいですし、自分のためにも質問にはできる限り答えるようにしようと思っています。 続きを読む »

関連するタグ:
5月 14

今回はシリアルデータをパラレル出力するためのICである、74HC595の使い方を説明します。

このICは最低3本の制御線で、8本の出力ができます。また、74HC595を直列に繋ぐことにより制御線はそのままに、一個追加するごとに8本の出力を増設できます。

用途はというとマイコンの出力端子が足りないときに増設するときに利用します。ただ、マイコンから直接出力するよりも時間がかかるので、速度の必要な用途には厳しいかもしれませんが、LEDへの出力など低速(内蔵IOポートに比べて)でも大丈夫な用途に利用できます。

さらに、74HC595は普通のシフトレジスタとは異なり、データの送信中は出力端子の状態を変えずに、全てのデータを送信し終わってから任意のタイミングで一気に出力ポートを変化させることができるようにラッチが内蔵されています。これにより、遅い動作で駆動させても出力端子の余計な変化は起こりません。

今回はAVRのATtiny2313から74HC595を通して3本の制御線で8個のLEDを点灯させてみることにします。

2010年3月4日追記:
ATmega等のSPI機能がついたAVRを利用する場合はSPI機能を利用することをおすすめします。SPIをつかったシフトレジスタの操作はこちら。SPIを使うことにより、シフトレジスタへの送信がハードウエアで行われ倍近くの動作速度が期待できます。しかし、動作原理を知るには以下のようにポートを直接操作するプログラムのほうがわかりやすいので、こちらも読んでいただくことをおすすめします。

シフトレジスタ(74HC595)の実験

シフトレジスタ(74HC595)の実験

続きを読む »

関連するタグ:
5月 10

はじめてAVRについて書くのにいきなりプログラムですいません。
開発環境などについては今後書く事にします。

今回はUSARTが搭載されているAVR(今回はATTiny2313)を利用してシリアル通信する方法を紹介します。
送受信とも割り込みを利用しているので他の作業と平行してシリアルの送受信ができます。
続きを読む »

関連するタグ: