Web制作、Web開発の歩き方

STM32入門(組み込み開発)

■第7話:LCDディスプレイの制御と外部割込みの活用

(最終更新日:2025.02.01)

C言語のイメージ
この記事は4分で読めます!
(絵が小さい場合はスマホを横に)

「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を使う場合、以下のような手順で表示を行う。

  1. 初期化(4ビットモード or 8ビットモードの設定)
  2. カーソル位置の設定
  3. 文字の送信
  4. スクロールや改行の制御

また、カスタムキャラクタ(例えば、特定のアイコンや漢字の一部)を作成することも可能だ。

■グラフィックLCDの制御
グラフィックLCDでは、ピクセル単位での描画が基本となる。 以下のような手順で制御を行う。

  1. フレームバッファの準備(RAMに描画データを作成)
  2. ピクセル単位の描画(点、線、四角形、円など)
  3. 画像データの転送(ビットマップをSPI/I2Cで送信)
  4. 画面更新(リフレッシュ)

リフレッシュレートや応答速度を向上させるため、ダブルバッファリング技術を用いることもある。

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 山本 小鉄