ARM(STM32)の基礎と開発入門【ARM初心者の効果的な勉強方法】
「ARM(STM32)の基礎と開発入門」では組み込みマイコンにARMコアを搭載したSTマイクロエレクトロニクス社のSTM32F1xxシリーズ(Cortex-M3)をベースに解説を行っています。このマイコンを使いこなす上で必須なマイコンの知識、マイコン周辺のハードウェアやソフトウェアを理解する上で必要な電子回路をはじめとする工学的基礎知識、マイコンに備わった機能詳細そしてマイコンを使用したアプリケーションを開発するためのシステム設計の解説を行っています。
このように書き出してみるとすべてを習得するのは大変そうですが、順次に学習を進めていけば身につくと思います。
それでは組み込みの世界に入っていきましょう。
組み込みに使われるマイコン
この章では組み込み技術のコア部分であるマイコンの概念からマイコン周辺の基礎知識のまとめおよび開発をすすめる上で必要となってくるツール類について解説しています。
組み込みシステムといえば何を思い浮かべるでしょうか。
組み込みシステムとはPC、タブレットなど汎用的なコンピュータシステムに対して各種機器に組み込まれる機能を特化した専用コンピュータシステムのことです。組み込みシステムを搭載した機器で思いつくものはざっと以下のようなものが挙げられます。
- 家電製品(冷蔵庫、洗濯機、シーリングライトなど)
- AV機器(テレビ、ビデオ、オーディオなど)
- 通信機器(スマホ、固定電話など)
- 運輸機器(自動車、電車など)
- FA機器(工業用ロボット、搬送装置(PLC)など)
- 娯楽機器(ゲーム機、パチンコなど)
- OA機器(プリンタ、スキャナ、コピー機など)
- 計測器(オシロスコープ、電力メーター、ガスメーターなど)
小さいものから大きいものまで現在の電気機器には組み込み技術はほぼすべて導入されているのではないでしょうか。むしろ、組み込み技術の導入されていない機器のほうが珍しいくらいです。
要するに組み込みシステムとはマイコン(マイクロコントローラ)を搭載した回路でセンサ、スイッチなど何らかの入力情報をもとにハードウェアとソフトウェアが密接に関連しながら機器への出力を制御して特化した機能を実現するコンピュータシステムのことをいいます。
マイコンということばがでてきましたがこれについては後ほど詳しく説明していきます。
ここでハードウェアとソフトウェアという概念がありますが、ハードウェアとはスイッチや電気・電子回路といった目に見える物理的なもので我々が直接手にするものはこのハードウェアのことです。
ソフトウェアは組み込みシステムにおいては搭載されたマイコンの内部にあるプログラムのことでハードウェアを制御するためにいろいろな機能を構成したものです。物理的に目に見えるものではありません。
組み込み機器はソフトウェアがなければただの機能しない物体です。逆にいかにすぐれたソフトウェアがあってもそれを活かす性能の高いハードウェアがなければ役に立ちません。
組み込み技術を扱うエンジニアはハードウェアとソフトウェア両方をバランスよく融合させてシステムを作り上げていく技能がとても重要なのです。
ソフトウェア以外は専門外といってハードウェアに関するものを他人まかせにしていては優れたシステムを構成することはできません。
組み込み技術としてプログラミングを中心としたマイコンの操作を解説するものも多いのですが、プログラミングもマイコン自体も組み込み技術そのものではなく一部の手段にすぎません。最終目的はマイコンを使ってさまざまなアプリケーション開発をするための設計技術、実践的なスキルを身につけることです。
組み込み技術の敷居が高いと言われるのはソフトウェアのプログラミング技術以外にも電気・電子工学、機械工学、制御工学など広い範囲での知識をまとめるチカラが必要だからです。
ただし、例えば電気・電子工学の知識といっても専門性の高い学問をするのではなく、ちょっとした実用的な回路を理解したり設計したりすればよいので恐れることはないのです。
大事なことはそれぞれの分野での基本を押さえることつまり本質を理解することで専門性を追求することではありません。
簡単な回路などの基礎的な原理をそのつど理解し、知識として身につけていく過程は実力がついていくことが実感できるため楽しいものです。好奇心がでてくれば知恵も育ち発展でき実力がより伸びるでしょう。
専門性の高い知識が必要な電気・電子回路などは必ずしも組み込み技術者が設計する必要はありません。知識は利用すればよいのです。ただし、組み込みシステムを設計するにあたっては各マイコンの仕様書が理解できるだけのチカラは身につけてほしいものです。
例えば、組み込み技術で身につけていれば大変心強い制御工学(フィードバック制御)についてもそうです。専門の書物などにかかれていることは数学の世界のため理解するのは本当に困難です。基礎がない場合、独学はほぼ不可能ではないでしょうか。また理解したところで実際に使えるようにはなりません。
これも大事な本質だけをとらえて実用的に使える一部だけ利用すればよいのです。専門性を高めたい場合はある程度の経験をつんで基本原理が理解できてからのほうがよいでしょう。
幅広い分野で活かすことのできる組み込み技術を短期間で習得するのは簡単とはいいませんが、効率よく学ぶことはできます。
本当の実力を実感するにはある程度の経験と実績は必要ですが、本質をとらえて基本原理の素地ができあがっていればいかほどにも発展できます。
組み込み技術に興味がある人にとってきっかけとなるマイコン選びは大切なのですが、当サイトで採用しているシステムを使って学習をしていくと効率よく着実にスキルが身についていきます。マイコンに触れるきっかけとなるシステムには電子工作で大人気のArduinoやARM開発環境で注目のMbedなどがありますが当サイトではマイコン学習用にカスタマイズしたシステムを「マイコン学習の初心者にArduinoでなくSTM32Nucleoをすすめるわけ」で紹介していますのでご参考ください。
マイコンとは
マイコン組み込み技術を学ぶ前に知っておくべきこと
マイコンの選択
開発環境・ツール
教材ボードについて
マイコンとC言語
当サイトではこれから組み込みエンジニアを目指す人に少しでも短期間でエッセンスを身につけてもらえるようなノウハウを散りばめています。
ここから一人でも多くの組み込みエンジニアが育っていくことを願っており、支援できればとおもっています。
組み込み技術の基本
この章では組み込み技術を学ぶにあたって必須の基礎知識を解説しています。アナログ・デジタルの概念からコンピュータ周辺を構成する回路についても紹介していますのでしっかりと理解しておいてください。
マイコンを学習する前に予備知識は何か必要なのでしょうか。
これまではこれまではマイコンの概念やマイコン開発のための具体的な内容を中心に話をすすめてきました。
これからマイコンについて本格的に学ぶにあたって、事前に知っておくべき電気・電子的基礎知識の要所を押さえていきます。
組み込み技術がプログラムだけでなくハードウェアの知識も必要といわれるその部分のことですのでとても重要なところです。例えば、マイコンで信号をやり取りするIOポートの回路がどのような構成でどのような種類の信号が扱われるかといったところです。
入力信号はセンサなどのハードウェアからインターフェースといわれる回路を介してマイコン内に取り入れられます。マイコンで信号を取得後、デジタル化し、プログラムで処理したあと再びインターフェースを介して外部に出力して何らかの処理をするのが組込みシステムですので具体的に回路や周辺ハードウェアを理解する必要があります。
また回路などのハードウェアの知識と同時にインターフェースの部分を理解するためにはアナログとデジタルに関する理解も大事です。プログラムを作成するにあたって常にモノを扱っている意識を忘れないで取り組んでもらいたいものです。
マイコンの理解がすすみ、実際の開発においてインターフェースの設計はとても重要です。マイコン周辺は電気・電子回路で構成することになるのですが、設計に不備があると機能しないだけでなく壊れてしまいます。と、いうと構えてしまいそうですが、絶対にしてはいけないことの要所を押さえておけばそう簡単に壊れるものではありません。
絶対にしてはいけないことの代表例では不意の短絡と電源極性を逆に接続することです。短絡や電源極性を逆に接続すると過電流が生じ異常発熱して破壊にいたります。こういった事故の確率を少しでも減らすために保護回路を付けるのです。
実際の製品には起こりうる色々なことが想定されて教科書にあるような基本回路以外にも冗長(余分)な回路がついています。設計の要は仕様を満たす回路を構成するにあたって、電流値などが定格を超えることのないゆとりのある部品の選定と同時に特に組み込みの部品において重要なことは入出力信号の応答に十分対応できる応答速度のものを選定することです。
これらを踏まえ、マイコンの周辺に使われる電気・電子的な回路の基本およびプログラムの基本的な構成を押さえていきましょう。
アナログとデジタル
デジタルの詳細
マイコンのビット数
ビット、バイト、ワードとデジタル論理について
マイコン周辺に使用する基本回路
パルスについて
マイコンの動作を理解するうえで電気・電子回路の基本を理解していることはとても大切です。
抽象的な概念でなく具体的で実践で使用する回路で学習することが理解への近道です。
当サイトではマイコンを理解するうえで必須な回路基礎をかみ砕いて解説していますのでしっかり学習してください。
マイコンの周辺機能(ペリフェラル)とは
マイコンに内蔵している周辺機能(ペリフェラル)とはどのようなものでしょうか。
マイコンにはCPU、ROM、RAM、I/Oそしてペリフェラルと呼ばれるメーカー独自の周辺機能が内蔵されています。
CPUは中央演算処理装置(Central Processing Unit)と呼ばれマイコンの中での司令塔つまり頭脳の役割をしています。作成したプログラムにしたがって順次命令を実行し、入力ポートのデータを読み込んだり、周辺機能の通信機能でモニター表示をだしながら、タイマーで計測した間隔で出力ポートへ信号をだしたりします。
マイコンには、このようにタイマ、通信、AD・DAコンバータなど家電やスマホをはじめとする電気機器や通信機器などで必須の周辺機能が盛り込まれています。内蔵されている周辺機能の種類はマイコンにもよりますが、基本的にタイマ機能、ADコンバータ、シリアル通信UARTそして汎用入出力ポート(GPIO)はどんなマイコンにも内蔵されている重要な機能ですのでこれらを使いこなせるようになればちょっとしたシステムは簡単に構成できるようになります。
マイコンがなかった時代ではこれらの周辺機能はすべてハードウェア(アナログ回路とデジタル回路)で構成していたわけですから、一つのシステムを構築するのは時間も労力もかかり大変でした。今では周辺機能はマイコンに内蔵されていますので、ソフトウェア(プログラム)だけですべて設定できます。
はじめにシステムの設計を将来的な仕様変更なども見越してきっちりとしたものにしておけば後々にはソフトウェアの変更で色々な機能変更などが簡単にできてしまいます。周辺回路をハードウェアで構成していたころからは考えられない便利さです。
周辺機能(ペリフェラル)とファームウェア(ドライバ)との関連
ペリフェラルライブラリ
レジスタマップの見方
周辺回路はマイコンに内蔵されたといえども、インターフェースを介してセンサなどの入力機器、表示モニターなどの出力機器なるハードウェアと結びつくものですので、電気・電子回路や入出力機器に関するハードウェアにも密接したある程度広い知識や経験も必要になっています。実際にものを機能させる技能が組み込み技術に必要なものであって、WEBエンジニアなどソフトウェアのみを扱うものとは異なるのです。
各周辺機能(ペリフェラル)詳細
各ペリフェラルを使いこなすためにライブラリを用いて解説しています。STM32マイコンは高機能のためすべてを理解するのは大変ですが、組み込みスキルを学ぶ上で必須な機能を抜粋して解説しています。
この章ではいよいよ、STM32F1xxシリーズ(Cortex-M3)に備わっている各ペリフェラルの詳細を解説していきます。
STM32マイコンは高機能のマイコンですが、すべての機能を理解したり、使いこなす必要はありません。必要に応じて機能を正しく使いこなせばよいのです。ただ、そのためには、STM32に備わっている周辺機能(ペリフェラル)をある程度は理解しておくことが必要でしょう。
例えば、ペリフェラルの中でもタイマ・カウンタやADコンバータはとても機能が多く、初心者にとってはどの機能を選択すればよいのかがわかりにくいかもしれません。そこで、当サイトでは各ペリフェラルで最も基本的な使い方ができる機能から解説しています。まずは実際に動作することを確認してから徐々に機能を発展させる感覚ですすめていけばよいと思います。
実際の動作は「マイコンプログラム例と実践」でサンプルプログラムに従って確認できます。
各ペリフェラルの機能については当サイトで紹介するのはすべてではなく、これだけ一通りおさえておけば大概の組み込みの仕事ができるといったものを抜粋したものなのでぜひ習得してもらいたいです。もちろん、要求仕様によってはより高度な機能が必要となるとおもいますがそれは初心者のレベルをはるかにこえたプロに必要なものなのでこのサイトでは取り上げておりません。
STM32マイコンのレファレンスマニュアルに各ペリフェラルの詳細が記載されているので、ある程度マイコンが使いこなせるようになりより高度な機能の使いかたをしたい場合にはマニュアルを参照して機能を高めてください。
ペリフェラルを使いこなすということは、ペリフェラルライブラリを使いこなすことなのですが、それはライブラリがSPL(Standard Peripheral Library)でもHAL(Hardware Absolute Layer)でも同じことです。つまり、とりあえず当サイトで採用しているライブラリSPLで機能を理解するとマイコン機能の本質を理解することになるので、当然将来HALへの移植も問題ないでしょう。もちろんレジスタを直接操作できるようになるとライブラリは不要なので関係ありませんが。
ちょっとむずかしい話になりかけてしまいましたが、初心者のうちはとりあえず順にたどっていけば理解できるようになると確信しています。でははじめましょう。
汎用入出力GPIO
システムクロック
システムタイマ
タイマ・カウンタ
さまざまな割り込み
ADコンバータ
シリアル通信USART
シリアル通信I2C
シリアル通信SPI
DMA
独立型ウォッチドッグタイマ
当サイトで解説している各ペリフェラルで使用するライブラリ関数はSTM32マイコンを使用する上での主要なものではありますが一部に過ぎません。さらに、いろいろな機能を使いたい場合にファームウェアSPLの解説している 辞書のように参考にできるサイトがありますので紹介しておきます。STM32ファームウェア関数一覧
組み込みで使うOS
アプリを作成するにつれて機能が増え、処理が複雑になってくるものです。複雑な処理はOSを使用すると体系的にプログラミングできるようになります。この章ではOSの概念から、組み込み使用されるRTOSについて解説をおこない、具体的な使い方を紹介しています。
これまで紹介してきた各ペリフェラルのサンプルプログラムなどの比較的単純な処理の場合は、処理ごとの内容をブロックに分けて、順次に実行させるだけでも用は足ります。
操作スイッチ、センサーなどによる入力、表示画面やモータなどへの出力などで構成したシステムでは、これらを使いこなすためのペリフェラルを使用した処理が複数組み合わさっています。システムを効率よく機能させるためにはこれら各処理を同時に実行させて、実行頻度や優先純度を任意に設定する必要がでてきます。
そこで、組み込みに適したOSを導入して各処理を管理することにします。この組み込みに適したOSはリアルタイムOS(RTOS)と呼ばれるものでいわゆるマルチタスクを簡単に実現できるようになります。
OSを導入するといっても軽いアドオンソフトのようなもので、ルールに従って一度パターンを構成すると、その後はアプリケーションプログラムごとに簡単に採用できるようになります。OSを使用しない場合に比べて、格段に楽に効率よく開発ができるようになりますのでできるだけ早い段階で導入することをお勧めします。
当サイトではリアルタイムOS(RTOS)の特に実践で必須の機能を抜粋して解説しています。実際のアプリで活用することを目的としていますので専門的な用語をあまりつかわず具体的な使用方法をプログラムで示しながら説明しています。視覚的に理解できるように努めていますので早期に使いこなせるようになってどんどん活用してください。
リアルタイムOS
FreeRTOS
タスク管理
キュー
組み込み開発設計
プログラミングによりマイコンを操作することができるだけでは、実務では不十分です。実際の開発においては設計という過程が必要となります。進めていくべき作業をステップ毎にわかりやすく解説していますので、じっくり取り組んでください。
これまではマイコンを操作するための周辺インターフェースやマイコンペリフェラルについての解説をしてきました。プログラミングを中心に進めていくソフトウェア要素の多い部分です。
なにか、アイディアが浮かんで具体化するためには設計という作業が必要です。この章では設計の概念から最終の動作を確認できるところまでの手順を解説しています。
組み込み技術にハードウェアの知識・経験が必要になるのはとくにこの設計の部分です。正しく設計されたハードウェアがあってはじめてソフトウェアが活かされるのでここはしっかり設計のイロハを身につけてください。
システム設計
ハードウェア設計
ソフトウェア設計
実装
デバッグ
外部クロック
電源周辺回路
マイコンのIoT化
組み込み製品にIoTに対応する技術を搭載すると、アプリケーションの幅が広がります。
ここではマイコンをIoT化するための手始めとして最も手軽な無線モジュール ESP32による無線機能(WiFi)を搭載するための手順を解説しています。
ホビー用途やPCプリンター等民生向けの機器ではWiFiを使用したアプリケーションが有用ですが、産業レベルの堅牢な性能が要求される機器においては有線LANシステムに組み込まれるものが要求されます。このサイトではEthernet非対応のマイコンSTM32F1xxシリーズに簡単に後付できるLANモジュールでTCPソケットによる通信、さらにHTTPサーバーを搭載してブラウザから通信する方法を紹介します。
IoTとはInternet of Thingsといったもので、いままでは製品がさまざまな分野で個々に独立して機能していたものが、ここ最近では有線、無線にかかわらず製品をネットワークに接続してちょっとしたリモート操作をしたり、インターネット回線を介して例えばスマホで製品の管理をすることも可能となってきました。
IoTの言葉そのままではなんやらすごく抽象的で実体がわかりにくいですが、ネットワークに製品をつなげることで、従来では考えられなかった発展性をもっています。今後の組み込み製品はIoTに対応することが必須であるといえるでしょう。
当サイトでは既存の組込みシステムを簡単にIoTに対応させることができる無線化モジュールをつかったものを紹介します。無線化モジュールはそれ自体にマイコンが内蔵されていて、WiFiプロトコルスタックやBluetoothプロトコルなどがシリアル通信だけで利用できるので比較的簡単です。
有線LANに関しては基本的にはマイコンそのものがイーサネット対応であることが条件でソフトウェアで構成される通信プロトコルスタックをどのように使用するかは結構ややこしく、STM32F1では対応していません。STM32F4シリーズあたりのEthernetに対応したマイコンとコード自動生成機能およびHALライブラリの開発環境を使用すれば比較的簡単に実現できますが、それでもソケット通信などプロトコル・スタックの基本的な使い方は知っておく必要はあります。
筆者の経験ではSTM32F1シリーズで製品化した既存のシステムをなんとかイーサネット対応にする必要性があったことから、外付けでイーサネット対応化するのに使用したのがWIZnet社のW5500というTCP/IPコントローラICです。このICにはTCP/IPプロトコルスタックがハードウェアとして内蔵されているので比較的簡単なコードだけで使用できるのが特徴です。通信インターフェースのSPIが使えれば実現できます。
SPI通信仕様で外付けコントローラによるマイコンのイーサネット化は電子工作用途ではちょっと敷居が高いのですが、ものにしてしまえば今後強力な資産となるでしょう。
このサイトではW5500を使用したもののみを扱っていますが、通信プロトコルの基本的な扱い方は共通ですので一度を理解してしまえば他のLANコントローラにもつぶしがきくようになります。
TCPソケット通信システムを一度構築してしまえば、あとはソフトウェア上で上位のHTTPプロトコルを搭載したり、さらにはWebSocketを搭載してブラウザとの双方向リアルタイム通信も可能です。
ここまでくれば、世間で必要とされているマイコンスキルをほぼ抑えていることになりますので、あとはスキルの組み合わせで無限の可能性に挑戦できるのではないでしょうか。
無線LAN(ESP32モジュール)の基礎
ブラウザを利用したWiFiリモートコントロール
マイコンのEthernet対応システム設計
TCPサーバーを実装したソケット通信
HTTPプロトコルで構成したWEBサーバーを搭載したマイコンシステム
WebSocketを使ったブラウザとマイコンでのリアルタイム通信
マイコンに実装したWebSocketの超高速リアルタイムモニター
携帯電話やテレビ、プリンタ等の家電製品ではWiFi搭載で無線でコントロールするものが一般的で有線LANとは言葉自体は時代遅れのような感じはしますが、それは民生品に限った「有線」です。産業機器向けの製品では運転環境条件の厳しい製造現場でのネットワークを組むためのLANは有線である必要があることに加え、輸出の可能性のある機器は各国の電波法により無線仕様は容易に扱えない事情もあります。セキュリティ面からもすべてが容易に無線に置き換わることはないでしょう。