第1章

インスパイアのためのイントロダクション
これらの「できること」を見ると，なんだこれは
（？）

1.1

マイコンで何ができるのかと思われた人もいるでしょう．こんなことはできて当たり前でしょうと．確かにその通りです．LED を点灯

あなたが本書を手に取った動機はさまざまでしょさせたり，家電の電源を操作したりするだけであれば，う．コンテストに出場するためのロボットを作りたい，

わざわざマイコンを使う必要はありません．ホームセ

組み込みプログラミングを学んでキャリア・アップしンターで売られている電球ソケット，AC 用ケーブル，

たい，などなど…．本書でマイコン開発を学ぶことで，スイッチ，コンセントをつなぎ合わせるだけです．

あなたの目的をかなえてくれるはずです．
それでは早速マイコンとは…という話を始めたいところですが，具体的なイメージで創作意欲をインスパ
イア（触発）したいと思います．

ただ，マイコンでの制御は「電球＋スイッチ」とは本質的に違う部分があります．それはプログラムで制御が可能であるということです．
「電球＋スイッチ」による制御であれば，電球を点灯

本書を読む動機が何であれ，マイコンを使うことは，させるためには，夜になったことを判断した人間がス① プログラムでイッチを押すという行為を行わなければなりません．

② 制御される

一方，マイコンによる制御であれば，マイコン内に内③ モノを作る

蔵したプログラムが，意図する内容通りに，電球を点ということが最終目的です．

灯させます．

作るという行為はとてもクリエイティブな要素を含

電球＋スイッチ＋人間＝点灯の制御

みます．あれこれと考えながら思いを巡らすのはたいを，へんですが，とても楽しい作業です．しかし，初めて

電球＋照度
（明るさ）
センサ＋マイコン＋プログラム

マイコンに取り組むときに，ただ作れと言われても，＝点灯の制御作りたいもの，作れるものがいったい何なのか想像がに置き換えることができたというわけです．
このような例であれば「マイコンで電球を点灯させつかないでしょう．
本書では，まずマイコンの「内蔵機能でできること」
を「組み合わせ」ながら考えていきます．
マイコンでできることの一例を表 1.1 に列挙しま

ることで何が便利になるんだ」と感じる人もいるでしょう．確かにその通りです．それでは次の仕組みを作りたいときにはどうすればよいでしょうか．

す．表 1.1 に示したのは，①から③のうち，②の制御「毎日夜になると点灯する電球．夜とは午後 6 時からする対象を意味します．なお，これは本書で紹介する

午前 6 時までをいう．ただし 6 月から 10 月までは午

マイコンの使用方法の例であり，マイコンでできるこ

後 7 時から午前 5 時までを夜とする．夜になっていなとはこれだけに限りません．

くても曇り空で暗いときには点灯する．電球が切れて

表 1.1
マイコンでできること

スイッチを読み取る
液晶に情報を表示する
音声ファイルを再生する
ジョイスティックを使う
無線通信する
時間を計測するLED を点灯させる
モータを動かす障害物を検知する
明るさを計測する
傾きを計測する
サーボ・モータを動かす

家電の電源を操作する
音を鳴らす
方角を知る
距離を計測する
情報を記憶する回転数を計測する

7

いて点灯しないときには，電子メールで通知する」
これも，「電球＋スイッチ＋人間」
で実現することは

ジョイスティック＋無線＋モータ＋プログラム＝ラジコン戦車できます．ただ，これを毎日間違いなく実行するとな

回転数計測＋方角計測＋情報記憶＋プログラム

ると簡単ではありません．一方，この制御はマイコン＝自転車用走行経路記憶機

で簡単に実現することができます．

サーボ・モータ＋障害物検知＋音声再生＋プログ

電球＋照度センサ＋電流計＋リアルタイム・ク

ラム＝子供向け犬型ロボット

ロック＋ Ethernet コントローラ＋マイコン＋プロ

明るさ計測＋ LED ＋プログラム＝切り忘れ防止型

グラム

トイレ照明

で「電球＋スイッチ＋人間」と同じ，もしくは同等以上といった組み合わせを思いつきました．ここで表 1.1の制御を行うことができます．

を眺めながら，10 個ぐらいは組み合わせを考えてみ

ここで「マイコン＋プログラム」に着目してくださてください．まじめな実用品だけでなく，ジョーク

い．電球や各種のセンサは，それ自体では能動的な活

グッズ的なものも，まずは頭の中で作り出してくださ動が行えない単機能の機器です．電球と時計はそれ自い．組み合わせたものが実際に動作しているところを体ではお互いに何の関係もなく，独立して動作します．

頭の中で想像すると，なかなか楽しいですよ．

これを「マイコン＋プログラム」
が中心となってつなぎ合わせることにより，新しい機能を生み出します．時

1.3

大切なこと

計に連動した電球や，電流計に連動したインターネッ
トも同様です．つまりマイコンは，「プログラムで機能を結びつける」ものだと考えることができます．

1.2

あなたならマイコンで何をしますか？

さて，いろいろなアイデアは思いついたでしょうか．
それでは早速製作を始めましょう．気後れすることはありません．大きなプロジェクトも結局は個々の小さな技術の組み合わせに過ぎません．
本書では表 1.1 に記載した「できること」を実際に行

さてここで，プログラムを中心にして，さまざまな

うための回路の作り方，プログラムの書き方を紹介し機能との組み合わせを考えてみましょう．自分が今プます．あとは実際に組み合わせたプログラムを作るだ

ログラムができるかどうかは，気にする必要がありま

けで，プロジェクトは完成です．

せん．この際，回路や部品で本当にこんなことができ

もう一つ忘れてはいけない要素があります．それはるのかといったことも考えないようにします．およそ

好奇心と情熱です．「こんなことができるんだ」「自分

思いつくことは，だいたい実現できます．

もやってみたい」「自分ならこんなものが作りたい」「こ

たとえば，表 1.1 を眺めていると，んなものが欲しい」という想いがプロジェクトを成功

ブックガイド 1.1

C 言語入門Ტ1Უ᭗೛᰺‫ډ‬ᲵǍƞƠƍ CᲦǽȕȈȐȳǯȑȖȪȃǷȳ
ǰᲦ2001 ࠰ 9 உᲨ
C 言語に初めて取り組む人向けに，「プログラミングとは何か」というレベルから解説しています．
Ტ2ᲣɤිΨǄƔᲵኵᡂǈྵ‫ئ‬ƷžCſᚕᛖ ؕᄽƔǒǘƔǔ
࣋ࡁλᧉų᣻ໜ‫ܖ‬፼Ქ૨ඥዻᲦ২ᘐᚸᛯᅈᲦ2010 ࠰
1 உᲨ
組み込み開発を想定した C 言語の入門書です．組み込Ტ3ᲣჵඑʁᨺᲵȗȭǰȩȞƷ‫ܦ‬μࠝᜤų᧏ႆᎍƕჷƬƯƓƘǂƖȗȭƷჷऔᲦ২ᘐᚸᛯᅈᲦ2007 ࠰ 1 உᲨ
C 言語の本ではありませんが，プログラミングに入門する前か入門した直後あたりに読んでおくと，前提知識が整理できるのでよいでしょう．
Ტ4ᲣȏȸȐȸȈȷǷȫȈᲵ཯፼ C ોᚖ༿Ღ፽පᅈᲦ1999
࠰ 2 உᲨ
定番の入門書です．きちんと C を学んでみたいというみ開発でよく用いるポインタや構造体の利用方法が詳し人にお勧めです．

く解説されています．はじめて C 言語を学ぶという方に

Ტ5ᲣLes Hancock ǄƔᲵોᚖᇹ 3 ༿ųC ᚕᛖλᧉᲦǢǹはちょっと難しいかもしれませんが，「やさしい C」を読んだあとであれば理解できるはずです．

ǭȸЈ༿‫ޅ‬Ღ1992 ࠰ 9 உᲨ
コンパクトにまとまっていますが，本格的な C 言語入
門書です．

8

第2章

マイクロコントローラのしくみできたとしても製作コストが高くなり，小型化が困難

2.1

マイコンの適用例

なものになってしまいます．またいったんワイヤー
ド・ロジックとして回路・機械を完成させると，これ最近の電子炊飯ジャーの多くは，炊きあがり時間を設定したり，炊き方加減を選択したりできるようになっています．このような炊飯ジャーはマイコンの典型的な適用例です．

を変更させるには，物理的な部分の再設計，再製作が必要になってしまいます．
そこでマイコンの登場となります．現在のマイコンには，センサ出力情報を把握するための A-D コン

現代的な炊飯器であれば，「はじめちょろちょろ…」

バータ，スイッチ入力を把握するための入力ポート，の火加減を炊飯器が調整し，ユーザが望んだ時間に炊高精度な時間計測が可能なタイマ，液晶をコントロー

きあがるという機能が実装（開発・製造の世界では一ルする出力ポート，アナログ出力を可能にする D-A

定の機能や性能，構造が備わっているときに「実装」さコンバータ/PWM コントローラがすべて内蔵されてれていると表現する）されています．この機能を実現

います．そのため，マイコンが 1 チップあれば，電子しようとすると，物理的・電気的には，式炊飯器を構成する機能を結びつけるための中核的機

ıb釜の温度やふたが閉まっているかどうかを判別

能がすべて揃います．そしてこれらの機能の制御は，するセンサ
ıb現在時刻と炊き始めからの時間を計測できるタ
イマ

ワイヤード・ロジックではなく，マイコン内部に電子的情報として記録させるソフトウェアによって制御できます．ソフトウェアによる制御であれば，必要に応ıbユーザによる設定情報（炊きあがり時間・好みの炊じて，随時，簡単に書き換えができます．このようなき方）や炊飯器の現在状態を表示するための液晶

ソフトウェアによる制御をプログラムド・ロジックとıb電熱器への通電や発熱量を操作するリレーやス
イッチング素子

言います．
このような理由から家電製品の多くにはマイコンがıbユーザからの操作を受け付けるボタン（スイッチ）

使用され，便利な機能を実現しています．またマイコが必要になります．

ンの適用先は家電製品だけではありません．たとえば

これらの機能を電気回路で別々に作成することもで

自動車では，エンジンの点火・噴射制御，変速制御，

きます．実際，マイコンが一般的でなかった時代には，ABS（Antilock Brake System），キーレス・エントリ，

ねじりバネや水晶振動子式のタイマと，サーミスタ

エアコンの温度制御，イモビライザなどのさまざまな（一定の温度で ON/OFF が切り替わるセンサ・ス制御にマイコンが使用されています．高級車では使用イッチ）を活用した「電気式」炊飯器が主流でした．こ

されているマイコンが 1 台あたり 100 個を超えているのような回路を，物理的な配線（ワイヤ）により論理をそうです．

実現しているという意味で，ワイヤード・ロジックと呼んでいます．

2.2

なぜマイコンを使うのかしかしこのような制御ではどうしても限界が出てきます．「火加減をだんだん強くする」や「毎朝 6 時 30 分

パソコンの世界でマイコンというと，昔のコンに炊きあがる」といった制御は電気的・機械的制御でピュータやパソコン自体を指します．辞書では，マイは，不可能ではありませんが容易ではなく，また仮にコンとはマイクロコンピュータ（Microcomputer ：超15

写真 2.1 マイクロコントローラ（STM32）

写真 2.2 パソコン用 CPU（Intel Pentium）

小型計算機）の略称と定義されています．これに対して

り，操作が便利になったりということはありません．

本書で扱うマイコンはマイクロコントローラ（Micro-

一方，マイコンの価格は数十円のものもありますし，

controller ：超小型制御器）の略称です（写真 2.1）．こ

高くても 1,000 円程度です．このように低価格で入手のマイコンも，超小型でかつ高度な計算機能を備えてできるマイコンであっても，炊飯器の機能を実現するいるので，超小型計算機であることに変わりありませために必要となる性能・機能は十分に備えています．

ん．物理的な外形もほぼ同じです．ただ，計算機能にまた，高性能な CPU ほど発熱量が多く，電力消費加えて，アナログ，ディジタルの入力機能，出力機能量が多くなります．一方，マイコンの消費電力は，パを備え，外部との物理的コミュニケーションが可能でソコン用 CPU と比べればごくわずかです．エコロ

あり，外部機器の制御ができることから，コントロー

ジー化で電力消費量の削減が叫ばれる中で，無駄に電ラ（制御器）と呼ばれています．

力を消費することは許されないでしょうし，電気代がパソコンが使用している CPU（以下本書では「パソ安く済むに越したことはありません．また炊飯器はコ

コン用 CPU」という．写真 2.2 は Intel の Pentium）はンセントにつないで使えますが，これが仮にバッテリ

高度化・高速化を続けており，最新型のパソコン用で動作する機器であればどうでしょう．電力消費量とCPU の計算能力は驚異的に高いです．そうすると，動作可能時間は反比例する関係にあります．携帯電話

マイコンでなくても，パソコン用 CPU を使えば，高などで「長時間動作」が重要な性能指標であることは言

性能な「電子式炊飯器」を作ることができるのではない

うまでもありません．

かと思えます．

そしてパソコン用 CPU には各種の入出力機能は内

しかし現実的にはそうはいきません．
まずコストは，蔵されていないことがほとんどです．たとえば Core

最新パソコン用 CPU はプロセッサ単体で数千円から

i7 プロセッサには，A-D コンバータや汎用入出力機能

数万円です．本書執筆時点で Intel の Core i7 920 プロ

は内蔵されていません．外部との接続機能は，パソコ

セッサは CPU だけで 3 万円もします．しかし炊飯器

ン用 CPU の利用者側が接続機能自体を自ら選択し，の製品価格は高くても数万円です．炊飯器に使用されパソコン用 CPU のバス（情報の伝送経路となる部分）

る多くの部品の中で，CPU だけでこれだけの費用がに接続する形で増設していきます．そのため，パソコ

かかってしまうと，炊飯器の製品価格が跳ね上がって

ン用 CPU の利用方法や形態の自由度は広がります．

しまいます．

しかし，これはパソコン用 CPU で外部機器を操作しもちろんこのような高機能なパソコン用 CPU を使ようとすると，その周辺に別途コントローラ・チップ

用することによって，独自の機能・性能を備えられるや電子回路を実装する必要があるということです．そということであれば，たとえ価格が高くても，製品とうすると基板のサイズがどんどん大きくなるので小型しての存在意義はあるといえるでしょう．ただ，炊飯化が困難になります．別に部品を付けることになるの器であれば，1 秒間に 1GHz（秒速 10 億回）の計算を行で，コストも上がります．一方，マイコンには各種のえるからといって，炊きあがるご飯がおいしくなった

電子的制御を行うために必要な周辺回路が最初から内

16

第3章

汎用入出力（GPIO）
ポートの基本：ファームウェアを使用した初期化と操作
本章ではマイコンにおける基本周辺回路である
GPIO を解説します．また GPIO の使い方とあわせて，
ファームウェア・ライブラリを使用したプログラミン

3.1.1

出力として使う場合

図 3.1 の出力ドライバを見てください．真ん中あた
りに「P-MOS」「N-MOS」という部品があります．MOS

グ方法も解説します．

とは MOS FET（Field Effect Transister ；電界効果型

3.1

GPIO の概要

トランジスタ）のことで，この各端子にはゲート（G），
ソース（S），ドレイン（D）という名前が付いています．

GPIO は，マイコンが出力しようとする情報を電気

MOS FET はトランジスタの一種ですが，ここでは信号の ON/OFF（電圧の高低）という形で出力し，外ゲートに電圧がかかるかで，ソースとドレインの間に部からマイコンに向けられた電気信号を，マイコンが電気が流れるかどうかのコントロールができるスイッ

情報として受け取るための周辺回路です．

チだと考えておいてください（P-MOS はゲートにマイ

この GPIO は実際にはどのような回路で構成されてナスの電圧をかけたときに，ソースからドレインに電いるのでしょうか．図 3.1 に STM32 のリファレン

流が流れ，N-MOS はゲートにプラスの電圧をかけた

ス・マニュアルの該当部分を示します．図 3.1 はときにドレインからソースに電流が流れる）．そしてGPIO の実際の回路図ではなく，GPIO の回路構成を

V DD はプラス側の電源，V SS はマイナス側の電源を意

抽象的に示した図です．点線で囲まれた上半分が入力

味します．MOS の接点部分からは右側に線が延びて回路，下半分が出力回路です．

おり，I/O ピンにつながっています．このように PVDD

アナログ入力オンチップ・
ペリフェラルオルタネート機能入力

ON/OFF
ON/OFF

読み込み

書き込み

入力データ・
レジスタ

ビットセット/
クリア・レジスタ

TTLシュミット・
トリガ
ON/OFF

オンチップ・
ペリフェラル

図 3.1
STM32 の GPIO の回路構成（データシートに加筆）

オルタネート機能出力

G
出力
コントローラI/Oピン
保護ダイオード

VDD

出力ドライバ
出力データ・
レジスタ

保護ダイオード

VSS

入力ドライバ

読み込み/書き込み

VDD

G

S
P-MOS
D
D
N-MOS
S

VSS

プッシュプル，オープン・ドレイン，VSS
両OFFのいずれか「本文中のサンプル・プログラムは必要部分のみを抜粋したものです．プログラムの全体は web ページからダウン・ロードできます．
開発環境の構築方法，プログラム・コードの確認方法，プログラムの実行方法は web ページに掲載の導入編を参照してください」

63

VDD

VDD
P-MOS

VDD

（

P-MOS
ソース接続

出力
コントローラ

出力ON時にP-MOS ON
N-MOS OFF
点灯する

（

N-MOS

VSS（GND）

出力
コントローラ

）MOS と N-MOS が対称に構成されている回路を
CMOS（Complementary MOS）と呼んでいます．
I/O ピンに発光ダイオードをつなぐと，図 3.2 のよ

）

シンク接続
N-MOS

VSS（GND）

GND

図 3.2 GPIO を出力として使用し，LED をシンク接続した場合の回路構成

出力OFF時にP-MOS OFF
N-MOS ON
点灯する

図 3.3 GPIO を出力として使用し，LED をソース接続した場合の回路構成

マイコンが出力を H にしているときには，P-MOS
は ON になって V SS に接続され，N-MOS は OFF になって切断されます．その結果，I/O ピンに接続されうな状態になります．出力と関係のない回路部分は省た LED は，両端が VDD に接続されているので点灯せいています．

ず，消灯したままになります．
ハイ

マイコンが出力を H にしているときには，上のス

逆にマイコンが出力を L にしているときには，P-

イッチ（P-MOS）は ON になって VDD に接続され，下のMOS は OFF になって切断され，N-MOS は ON にスイッチ（N-MOS）は OFF となって切断されます．結なって VSS に接続されます．その結果，I/O ピンに接果 I/O ピンに接続された LED は VDD から VSS に接続さ続された LED は VDD から VSS に接続されているので，れているので，電流が流れて点灯します．

電流が流れて点灯します．図 3.2 の回路ではマイコン

ロー

逆にマイコンが出力を L にしているときには，PMOS は OFF になって切断され，N-MOS は ON にの出力が H のときに点灯しましたが，今度の回路ではマイコンの出力が L のときに点灯します．

なって VSS に接続されます．その結果 I/O ピンに接続

このように，P-MOS が ON になったときにマイコンされた LED は，両端が V SS に接続されていることにから電流が流れ出る形で接続する方法をソース接続となるので点灯せず，消灯したままとなります．

言い，マイコンから流れ出ている電流をソース電流とマイコンの出力は，I/O ピンをプラス側とマイナス言います．図 3.3 の回路のように，電源のマイナス側側の電源につなぎ替えるスイッチです．ここで LEDのスイッチが ON になったときにマイコンに電流が流のつなぎ方を図 3.3 のように変えてみましょう．

れ込む形で接続する方法をシンク接続と言い，マイコ

図 3.2 とは異なり，LED のアノード側が電源のプラス側に接続され，カソード側が電源のマイナス側に接続されています．このように接続したときに，LEDは点灯するのでしょうか．
コラム 3.1

ンに流れ込む電流をシンク電流と言います．

3.1.2

入力として使う場合

図 3.1 の入力ドライバにある「TTL シュミット・ト

ソース接続とシンク接続

マイコンの GPIO を出力として使い，LED のように違いがあるからです．後述のとおり MOSFET は，同じ電流を消費する部品を直接接続する場合には，通常はシサイズであれば，P 型のものよりも N 型のものの方が多ンク接続を利用します．
GPIO 出力の内部回路は先述のように CMOS になってくの電流を流すことができます．N-MOS に電流を流すために使用できるのはシンク接続です．

います．そのためソース接続でもシンク接続でも接続先そのためソース接続とシンク接続の許容電流量を分けの部品への電流の供給を制御できます．見た目の違いは，て規定し，シンク電流の方が余裕があるマイコンが多く

ON 時と OFF 時のどちらで電流が流れるのかと，接続なっています．ただし本書では，「ON 時に ON になる」

先の部品を VDD と VSS のどちらに接続するのかという点という分かりやすさを重視したのと，STM32 はソースです．

接続でもシンク接続と同じ量の電流を流せるので，ソー

それでもシンク接続が望ましいのは，流せる電流量に64

ス接続を多く用いています．

第4章

汎用入出力（GPIO）
ポートの活用：
各種回路
ここまでのプログラムでマイコンの基本的な入出力が扱えるようになりました．本章からは LED の点灯

レクタからエミッタに向けて流れる），そのままでは交流をコントロールできません．

のような実験室的な回路だけではなく，実際の開発やまた扇風機のようにモータを使用している機器の場

製作で活用できる回路とプログラムの例を紹介します．

合，電源を切ったあと余勢で回っているときは発電し

.1
4.1.1

ソリッド・ステート・リレー
によるスイッチ操作
AC コントロールとアイソレーションています．この電力がマイコン側に流れ込んでしまうと，マイコンの許容電圧や許容電流は大きくはないので，マイコンを傷めてしまう可能性があります．そのため ON/OFF の信号の処置をする回路と，機器の動作に関わる回路とは絶縁されている必要があります．
i

s

o

l

a

t

i

o

n

マイコンから，AC100V 動作の機器（要は家庭用コ

絶縁することを「アイソレーションする」，絶縁されてンセントから電源をとるもの）
を操作してみましょう．

いる状態のことを「アイソレーションされている」と言

ここではパソコンからの操作で扇風機を ON/OFF さいます．

せてみます．

アイソレーションするためによく用いられているのLED のように直流で動作する素子であれば，たとえは，リレーを使う方法です（写真 4.1，写真 4.2）．リ

必要な電流が大きくても，マイコンの GPIO に直接ト

レーは電磁石でスイッチを物理的に操作し，ON/OFF

ランジスタを接続してドライブすれば動作させることを行います．

ができます．しかしトランジスタに流せる電流の方向

電磁石を介して操作しているので，アイソレーショ

は一定なので（NPN トランジスタであればベースとコンされており，スイッチ部分はごく単純な機械的な接点なので，直流/交流ともに流すことができます．
ただ，リレーは電磁石を使っているため消費電力が大きいことと，機械接点があることから寿命が長くはないというデメリットがあります．物理接点を用いて

写真 4.1 リレー（基板実装タイプ）

写真 4.2 リレーの接点の拡大写真（左半分が接点，右半分が電磁石 写真では右側の接点につながっている）「本文中のサンプル・プログラムは必要部分のみを抜粋したものです．プログラムの全体は web ページからダウン・ロードできます．
開発環境の構築方法，プログラム・コードの確認方法，プログラムの実行方法は web ページに掲載の導入編を参照してください」

93

330Ω

＋
DC

100Ω
1

6

2

4

MOC3041−

BTA24600CWRZNR07 AC
D151K

図 4.1 秋月電子通商のソリッド・ステート・リレー・キッ
トの回路

写真 4.4 裏面からターミナル端子で固定したることがないようにしなければなりません．
感電しないにしても，AC100V が 100V 用でない回路に供給されてしまうと，瞬時にその回路を破壊して
写真 4.3 電源ケーブルの途中部分を開く形で製作した

しまいます．回路の実験前には，100V 系の回路とそのほかの回路がショートしていないか，テスタでいるので，高速なスイッチングにも向いていません．

チェックしてください．また AC 電源は電圧が高く，そこで最近は半導体で構成されるソリッド・ステー供給される電力量も潤沢なので，ショートさせてしまト・リレーがよく用いられるようになりました．なおうと簡単に発火します．発火する前にブレーカが落ち

ソリッド・ステート・リレーだけではアイソレーショ

るケースもありますが，保証はできません，電気設備

ンが難しいので，フォトカプラやフォト・トライアッを痛めてしまう可能性もあります．プラグの端子間もクを併用します．これらは光でアイソレーションを行

確実に絶縁されているか，慎重にチェックしてくだいます．入力側は LED を点灯させるようになっておさい．

り，出力側は光に感応して ON/OFF が行われるフォト・ダイオードが内蔵されています．
ソリッド・ステート・リレーを利用する際には，自電力量や電流量の許容範囲を超えることから，AC
100V が流れる回路をブレッド・ボード上で組んではいけません．

分で部品を集めて製作できますが，秋月電子通商からまた詳細な解説は省きますが，電気設備の一部とな

安価なキット〔ソリッド・ステート・リレー（SSR）・る部分，たとえばブレーカとコンセントの間にソリッ

キット 25A（20A）
タイプ 通販コード K-00203，250 円〕

ド・ステート・リレーを設置するには電気工事士の資が発売されています．今回はこれを利用します．なお

格が必要です．加えて AC 電源に接続される機器を開同社は製品の仕様変更や品番の改廃が多いので，実際発して商用製品として販売する際には，PSE マークに購入する際には同等品を選択するよう留意してくだを取得する必要があります．安全確保のための規制な

さい．

ので，かならず遵守するようにしてください．

4.1.2

AC 機器操作の際の注意

4.1.3

キットの製作

AC 電源を利用する製作には特別の注意が必要です．

キットの製作自体は説明書通りに行えば，とくに問AC 電源の電圧は 100V です．100V が流れている回

題はありません．回路を図 4.1 に示します．筆者は，

路に手が触れると感電し，場合によっては重篤な障害

延長コードの間にキットを挟み込む形で製作しましたを負うことになります．回路のどの部分に 100V が流（写真 4.3）．

れているのかを正確に把握し，使用するときだけコンセントに接続するようにしてください．

細かい工夫としては，①入力端子部分はマイコンとの接続を考慮してヘッダ・ピンとし，②出力部分はソ本書の例ではキットの基板がむき出しとなっていま

リッド・ステート・リレーに付けるヒートシンク（放すが，製作者以外が使用することがある機器の場合に熱板）と干渉しないように，ターミナル用端子を圧着

は，かならずケースなどに格納し，誤って回路に触れしたケーブルをねじ止めしました（写真 4.4）．

94

第5章

システム・タイマ：
タイマと割り込みの基本
システム・タイマは Cortex-M3 コアが備えている

ステム・タイマではカウンタの値がゼロになると，割シンプルなタイマです．簡単に利用できるので，タイり込みが発生します．その後カウンタは自動的に前のマと割り込みの基礎を，システム・タイマを題材にし値に戻され，またダウン・カウントを開始します（図て解説します．

5.1）．ちなみに，0 からスタートして，設定した値まなおシステム・タイマは Cortex-M3 コア自体にもともと備わっている機能です．そのためリファレン

でカウンタを 1 ずつ増やしていくタイマをアップ・カ
ウント・タイマと言います．

ス・マニュアルには解説がありません．レジスタの内割り込みはマイコンが現在行っている処理を強制的容などの詳細を確認したい場合には，「Cortex-M3 テに中断させて，ほかの処理を行います．システム・タ

ク ニ カ ル リ フ ァ レ ン ス マ ニ ュ ア ル 」の 中 の「 8 . 2 . 2

イマの割り込みを利用すると，一定時間が経過するごNVIC レジスタのマップ」を参照してください．

とに行いたい処理を実行できます．たとえば，システ.1システム・タイマと割り込みの連携動作

システム・タイマは 24 ビットのカウンタでできてム・タイマ割り込みが発生するたびごとに LED の点
灯/消灯を切り替えれば，マイコンが別のプログラムを実行している間でも，LED を点滅させることができます．

います．マイコンの世界では「8 ビットタイマ」といえ時間の計測であれば，たとえばシステム・タイマ割

ば，8 ビットのビット長の最大の数字まで数えることり込みを 1ms ごとに発生させて，そのたびにカウンができるカウンタを意味します．24 ビットの最大値

ト用の変数の値を 1 ずつ増やしていけば，カウント用である 0b 11111111 11111111 11111111 は 10 進数で変数が 1000 になった時点で，1 秒が経過したと判断

16,777,216 ですから，およそ 1600 万まで数えることができます．次項で紹介するサンプル・プログラムのできます．これだけ数えられるのであれば，任意の時

Delay 関数では，割り込みとシステム・タイマを組

間をシステム・タイマだけで計測できそうにも思えま

み合わせています．Delay 関数は，引数として渡さす．しかし，システム・タイマはシステム・クロック

れたミリ秒の間，何もしないで待つという関数です．

が発生するたびにカウントされます〔正確には AHB

ここではシステム・タイマは「1 ミリ秒が経過するごクロック（HCLK）．詳しくは第 2 章参照〕．つまり最とに割り込みを発生させる」ように設定しています．

大で 72MHz もの速さでカウントされます．1 秒間にそして割り込み処理には，「システム・タイマ割り込

7200 万カウントするため，システム・タイマのカウみが発生したらカウンタ変数を 1 減算する」という処ントを最大限に使っても，0.2 秒程度になります．そ理が登録されています．Delay 関数は常時カウンタのため時間などをカウントする際にはプログラムでの変数が 0 になっていないかを監視しており，割り込み工夫が必要です．
システム・タイマはダウン・カウント・タイマです．あらかじめタイマに値を設定し，クロックなどがによってカウンタ数が 0 になった時点で無限ループから抜けて，関数の呼び出し元に処理が戻るようになっています．

発生するたびにカウンタが 1 ずつ減っていきます．シ「本文中のサンプル・プログラムは必要部分のみを抜粋したものです．プログラムの全体は web ページからダウン・ロードできます．
開発環境の構築方法，プログラム・コードの確認方法，プログラムの実行方法は web ページに掲載の導入編を参照してください」

119カウント値
1カウントの時間
×タイマ設定値
設定値
アップ・
カウント

0

時間
割り込み発生割り込み発生割り込み発生割り込み発生割り込み発生割り込み発生

カウント値
設定値

図 5.1
アップ・カウントとダウン・カウント時のカウンタ値の変化

ダウン・
カウント

0

時間

ライブラリ 5.1 SysTick_Config 関数

定義されています．CMSIS は同じ Cortex コアを内蔵

関数プロト static __INLINE uint32_t
SysTick_Config(uint32_t ticks)
タイプ
システム・タイマの①割り込み有効化，②動作
カウンタ初期化，③再ロード・レジスタの設定，④スタートを行う
再ロード・レジスタの値を指定
引数ticksする．システム・タイマはこの値から 0 までカウントする
正常に実行を終了した場合 0 を返す．不正
戻り値
な ticks（システム・タイマのカウント上限
値を超える値）が与えられた場合 1 を返すするマイコン間でアプリケーションの相互互換性を高めるための規格や仕様，フレームワークの総称で，ARM が定めています．
STM32 では，アップ・カウント・タイマの「この値までカウントしたらカウンタを 0 に戻す値」，ダウ
ン・カウント・タイマの「最初にタイマに格納されている値：カウンタが 0 になったときに，再びカウンタに設定する値」を再ロード・レジスタや自動再ロー
ド・レジスタと呼んでいます．
システム・タイマは 0 になったときに割り込みが発.2

LED の点滅処理

生するのではなく，0 になってからその次のカウント
で割り込みが発生します．そのため自動再ロード・レ

5.2.1

割り込みによる直接操作

ジスタに設定する値は「カウントしたいカウント数−1」となります．SysTick_Config 関数の場合，内部サンプル・プログラム systick_ob_led_toggle_by_interrupt_onlyの実装で渡された引数 ticks の値から 1 を引いた数

ここではコードを見ながら解説していきましょう．

を自動再ロード・レジスタに設定しています．そのた

サンプル・プログラムは 1 秒ごとにオンボード LED

め SysTick_Config 関数を使用する場合は，カウンを点滅させます．「1 秒ぐらい」や「たぶん 1 秒」ではな

トしたい値をそのまま引数として渡せばよいことにな

く，本当の 1 秒であるというのがポイントです．これります．

までのサンプル・プログラムでは，main.c だけを使サンプル・プログラムでは main.c のリスト 5.1 で用していましたが，ここからは stm32f10x_it.c や

SysTick_Config 関数を使用しています．System

stm32f10x_it.c，そして main.h も使用します．

CoreClock は system_stm32f10x.c で定義されてマイコン・ボードに回路を接続する必要はありません．

いる定数で，システム・クロックの周波数となってい

まずは SysTick_Config 関数（ライブラリ 5.1）をます．72MHz であれば 72,000,000 です．

使用して，システム・タイマを初期化してスタートさシステム・タイマはシステム・クロックと同じ速度せます．なお SysTick_Config 関数は CMSIS の一でカウントしているので，たとえば再ロード・レジス

部であり，core_cm3.h 内でインライン関数として

タに 72,000,000 を設定すれば，1 秒をカウントできま120このＰＤＦは，ＣＱ出版社発売の「STM32マイコン徹底入門」の一部見本です．
内容・購入方法などにつきましては以下のホームページをご覧下さい．
内容
http://shop.cqpub.co.jp/hanbai//books/49/49861.htm
購入方法
http://www.cqpub.co.jp/hanbai/order/order.htm