7 プログラムの修正

GPIO出力を操作する
 
次に、実際にLEDを点滅させます。
LEDは電流を流したら光るという電子部品です。Value Line Discovery上に付いているLEDは、マイコンのピンに接続されているので、マイコンのピンの電圧が上がると、マイコンから電流が流れて点灯します。逆に、マイコンのピンの電圧が下がると、電流が流れないので消灯します。
つまりなんですが、マイコンのピンの電圧の上げ下げで、LEDを点灯させるか、消灯させるかをコントロールできるということです。ですので、マイコンのピンの電圧を上げ下げする方法を確認しましょう。これもST社のファームウェアの関数を実行するだけです。
ソースコードの続く行を見てみると、81行目にGPIO_SetBitsという関数があります。これは指定されたポートのピンの出力電圧を上げるという機能を持っています。サンプルプログラムでいうと、GPIOC、GPIO_Pin_9とあるので、ポートCの9番ピンの電圧を上げるということになります。ちなみに上げると、電源電圧に近い電圧になります。だいたい3Vぐらいです。ですのでこの関数を実行した瞬間に、LEDが点灯します。
次は消灯させるんですが、点灯させたあとにすぐに消灯させると、人間の目では確認ができません。Value Line Discoveryに搭載されているSTM32はバリューラインで、シリーズの中では実行速度が遅いんですが、それでも命令実行速度は24MHzもあります。つまり1秒間に2400万回です。GPIO_SetBits関数を実行するのに命令を24個ぐらい実行する必要があると仮定しても、1マイクロ秒しか点灯しないということになります。ですので、点灯と消灯の間に待ち時間をいれることで、人間にも点滅をわかるようにします。
 
時間待ち関数
 
次の行で出てくるdelay_ms関数が時間待ちのための関数です。この関数はファームウェアの関数ではなくて、私が用意したものです。引数に指定した「マイクロ秒」だけ、何もしないで待ちます。待つというのは、具体的には、その時間が経ってから次の行を実行するという意味です。
100と指定すれば100マイクロ秒、つまり0.1秒待ちます。1000マイクロ秒だと1秒です。
サンプルプログラムだと、ボタンを押していないときは変数Timeに100が入っていますので、0.1秒待ちます。ボタンが押されているときはTimeに500が入っていますから、0.5秒待ちます。
さて、先ほどは点灯させましたので、次は消灯です。GPIO_ResetBitsという関数があります。この関数は先ほどのGPIO_SetBits関数とは反対に、指定したピンから出力される電圧を下げます。下げると出力される電圧はほとんど0Vになります。0VだとLEDに電流が流れませんから、LEDは消えます。
このあとすぐにLEDを点灯させると、やはり消灯されていたことを確認できませんから、またdelay_ms関数で同じ時間だけ待ちます。
これで点灯消灯をしたわけなんですが、ボタンを押していない場合は、0.1秒間点灯させて、0.1秒間消灯させるので、合計で0.2秒で点滅します。ボタンを押している場合は、0.5秒ずつなので、合計で1秒です。秒針のある時計を持っている方は、せっかくなので、ボタンを押している間のLEDの点滅と、秒針が動くタイミングがおなじなので、確かめてみて下さい。
プログラムとしては、あとはこれの繰り返しです。
 
プログラムを改造する
 
さてお仕着せのプログラムだとおもしろくないですよね。ここでちょっと改造を加えてみましょう。点滅のスピードを変えてみて下さい。方法は…、おわかりですよね。待ち時間を変えればいいわけです。増やしたり、減らしたり。ではご自身が思うところの数値に適当に変更してみて、ボードに書き込んでみて下さい。早くする、遅くする、スピードの早い、遅いを逆にする、点灯、消灯時間に差を付ける、いろいろできると思います。
ソースコードを変更したらセーブをしないといけません。Ctrlキーを押しながらSを押すか、ファイルメニューからセーブを選んでください。その後allをダブルクリックして、flashをダブルクリックします。
さあできたでしょうか。
じゃあ次は、Value Line Discoveryに載っているもう一つのLEDを点灯させてみましょう。右下には青色発光のLEDが付いています。このLEDはマイコンの
PC8
に接続されています。さて、点灯させるにはどうしたら良いでしょうか…。さっきの解説とコードから考えてみて下さい。
皆さん、想像が付いたと思いますが、GPIO_SetBits関数やGPIO_ResetBits関数で指定していたポート・ピンを変えるだけです。さらに緑と青のLEDを交互に点滅させてみてください。簡単ですよね。
 
最後に
 
さて実験はこのあたりで終わりにしたいと思います。
さてどうでしょう。このセミナーを受講頂いて、マイコンにどんな印象をお持ちになりましたか?マイコンは自分には全く手に負えなさそうだと感じた方?たぶんいらっしゃらないのではないかと思います。
このセミナーで、私が一番、お伝えしたかったことは、皆さんにもきっとできるということです。
マイコン開発を学ぶというのは要はこの調子で、ひとつひとつ学んでいけばいいわけです。
昔のマイコン開発は、開発環境を揃えるのに一苦労したり、その設定に一苦労したり、ちゃんとプログラムを書き込んだのに動かなくて一苦労したりでした。でも今回皆さんに提供した環境であれば、私が、皆さんがたぶん遭遇する苦労を先にしておきましたので、余計な苦労はしてもらわなくて済みます。
開発環境の準備は簡単でしたよね。あのコピー作業です。もちろん大丈夫でしたよね。書き込んだプログラムもちゃんと動きましたよね。書き込んだプログラムを自分の思い通りに修正するのも、できましたよね。
だから皆さんにもきっとできます。
だまされたと思ってということでも構いません。自分にもきっとできるんだと信じて、ぜひマイコン開発に挑戦していただきたいと思います。
最後までご覧頂き、本当に、ありがとうございました。今後もマイコン徹底入門をよろしくお願いいたします。