STM32入門(組み込み開発)
■第7話:LCDディスプレイの制御と外部割込みの活用
(最終更新日:2025.02.01)
(絵が小さい場合はスマホを横に)
「LCDディスプレイを制御しよう」
組み込みシステムの開発において、LCDディスプレイの制御と外部割り込みの活用は非常に重要な要素だ。
本記事では、キャラクタLCDとグラフィックLCDの違いや、画面表示の基本について解説する。
また、外部割り込みの仕組みやボタン操作をトリガーとする実装についても説明する。
[目次]
1.LCDディスプレイの制御
1.1 キャラクタLCDとグラフィックLCDの違い
LCDディスプレイには、文字のみを表示するキャラクタLCDと、自由にピクセル単位で描画できるグラフィックLCDの2種類がある。 それぞれの特徴を次に述べる。
キャラクタLCD(左)とグラフィックLCD(右)
■キャラクタLCD
キャラクタLCDは、決められたフォーマットで文字を表示するディスプレイだ。
例えば、16x2(16文字×2行)、20x4(20文字×4行)といった種類があり、1つのセルには1文字を表示できる。
代表的なICには HD44780互換のLCDモジュールがあり、制御はI2C、SPI、またはパラレル(4ビット/8ビット)で行われる。
キャラクタLCDの利点としては、低消費電力、制御がシンプルで少ないリソースで動作可能、文字情報を明確に表示することが挙げられる。
一方、欠点としては、ピクセル単位の自由な描画ができない、フォントの種類、サイズを変えられないということが挙げられる。
■グラフィックLCD
グラフィックLCDは、ピクセル単位で自由に描画できるLCDだ。
例えば、128x64ピクセルのLCDでは、任意の場所に文字やアイコン、グラフを描画できる。
代表的なコントローラには ST7565 や ILI9341 などがある。
グラフィックLCDの利点としては、文字だけでなく文字以外の表現が豊かにできる、フォント、デザインを自由に変えられる、GUIを構築できることが挙げられる。
一方、欠点としては、制御が複雑で、メモリ、CPUリソースを多く消費する、フレームバッファの管理が必要になるということが挙げられる。
1.2 画面表示の基本
■グラフィックLCD
グラフィックLCDは、ピクセル単位で自由に描画できるLCDだ。
例えば、128x64ピクセルのLCDでは、任意の場所に文字やアイコン、グラフを描画できる。
代表的なコントローラには ST7565 や ILI9341 などがある。
グラフィックLCDの利点としては、文字だけでなく文字以外の表現が豊かにできる、フォント、デザインを自由に変えられる、GUIを構築できることが挙げられる。
一方、欠点としては、制御が複雑で、メモリ、CPUリソースを多く消費する、フレームバッファの管理が必要になるということが挙げられる。
■キャラクタLCDの制御
キャラクタLCDは、シンプルなコマンドセットで制御する。
例えば、HD44780のLCDを使う場合、以下のような手順で表示を行う。
- 初期化(4ビットモード or 8ビットモードの設定)
- カーソル位置の設定
- 文字の送信
- スクロールや改行の制御
また、カスタムキャラクタ(例えば、特定のアイコンや漢字の一部)を作成することも可能だ。
■グラフィックLCDの制御
グラフィックLCDでは、ピクセル単位での描画が基本となる。
以下のような手順で制御を行う。
- フレームバッファの準備(RAMに描画データを作成)
- ピクセル単位の描画(点、線、四角形、円など)
- 画像データの転送(ビットマップをSPI/I2Cで送信)
- 画面更新(リフレッシュ)
リフレッシュレートや応答速度を向上させるため、ダブルバッファリング技術を用いることもある。
2.外部割り込みの活用
2.1 割り込みの仕組み
割り込みとは、通常のプログラムの流れを中断し、 特定のイベント(ボタン押下、通信受信、タイマー発生など)に対する処理を即座に実行する仕組みである。
■ポーリングと割り込みの違い
CPUがループ処理で状態を監視し、イベントが発生したら処理する方式がポーリング、
イベントが発生した瞬間にISR(割り込みサービスルーチン)が呼ばれる方式が割り込みである。
割り込みの方が、CPUリソースを無駄に消費せず、他の処理をしていても即座に反応できるというメリットがある。
■外部割り込みの概要
マイコンのGPIOピンに対して、外部割り込みを設定することで、ハードウェアイベント(ボタン押下など)を検知できる。
例えば、STM32では EXTI(External Interrupt) を使用してGPIOピンの立ち上がり・立ち下がりエッジを検出できる。
立ち上がりエッジとはボタンが押された瞬間の検知、立ち下がりエッジとはボタンが離された瞬間の検知になる。
割り込み処理の最適化として、処理時間を最小限にする、グローバル変数の更新にはvolatileを使用する、ボタンのチャタリング対策などをしている。
2.2 ボタン操作をトリガーにする実装
ボタンを押したときに特定の処理を実行するには、外部割り込みを活用する。
STM32でのボタン操作実装例
このように、ボタンが押されたら button_pressed_flag を立てて、メインループで処理する。 つまり、このフラグを起点にブザー音を鳴らしたり、モーターを動かすことができる。 ボタンを押した時のチャタリング対策としては、 ソフトウェア的な対策(一定時間待つ)とハードウェア的な対策(コンデンサやシュミットトリガ回路を使用)がある。
3.まとめ
本記事では、LCDディスプレイの制御と外部割り込みの活用について解説した。
キャラクタLCD はシンプルな情報表示向け、グラフィックLCDは自由度の高いGUI向けとして使える。
そして、LCDの描画制御にはフレームバッファ管理やリフレッシュ制御が必要になる。
一方、外部割り込みを活用することで、ボタン操作などのイベント処理を効率化することができる。
割り込み内の処理は最小限にし、デバウンス対策を適切に行うことが重要である。
LCDや割り込み処理を活用すれば、よりインタラクティブな組み込みシステムを構築できる。
ぜひ実装に活かしてみよう。
▼参考図書、サイト
STM32マイコン公式日本語サイト
STマイクロエレクトロニクス
「WindowsではじめるSTM32」 インプレスR&D 山本 小鉄