STM32L_LS027B4DH01 の説明 V002 2014/03/30 STM32L-Discovery 用に作成した LCD LS027B4DH01 に ASCII 文字表示を行うプログラムです Free の開発ツール Atollic TrueSTUDIO for ARM Lite ( 試用版 ) で作成したプロジェクトサンプルです プログラムの開始番地は 0x08000000 です デバッグが可能です 目次 1. LCD LS027B4DH01 について... 2 2. LS027B4DH01 の接続信号... 3 2.1. STM32L-Discovery と LS027B4DH01 との信号接続... 3 2.2. LS027B4DH01 接続基板を使用して接続する場合... 3 3. プログラム実行時の動作... 5 4. プロジェクトの構成... 6 4.1. 独自に追加したソースフォルダ... 6 4.2. ルートのファイル... 7 6. 主なモジュールの説明... 7 6.1. HandleTIM... 7 6.2. main.c... 8 6.3. UserPrograms... 8 6.4. LS027B4DH01... 9 7. 表示フォントについて... 12 7.1. ASCII 8 x 8 font... 12 7.2. ASCII 16 x 16 font... 12 1
1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x 42.82 x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が消えたりします 繊細なので気を付けてください 次ページに続く 2
2. LS027B4DH01 の接続信号 2.1. STM32L-Discovery と LS027B4DH01 との信号接続 STM32L-Discovery と LCD LS027B4DH01 とを接続するのに使用する信号は以下の通りです LS027B4DH01 の接続信号表 LS027B4DH01 信号名端子番号 STM32L-Discovery ピン番号 CPU 信号名 CPU 機能名備考 1 SCLK P1-25 PB13 SPI2_SCK 2 SI P1-27 PB15 SPI2_MOSI 3 SCS P1-24 PB12 SPI2_NSS 4 EXTCOMIN P1-16 PA1 I/O COM 反転信号 5 DISP P1-26 PB14 I/O 6 VDDA ----- +5V 7 VDD ----- +5V 8 EXTMODE ----- COM 反転選択 High のとき EXTCOMIN が有効 9 VSS ----- GND 10 VSSA ----- GND 2.2. LS027B4DH01 接続基板を使用して接続する場合 1) LS027B4DH01 接続基板使用時の接続信号表 LS027B4DH01 端子番号 P2 信号名 接続基板 P1 ピン番号 STM32L-Discovery ピン番号 CPU 信号名 CPU 機能名備考 1 SCLK 1 P1-25 PB13 SPI2_SCK 2 SI 2 P1-27 PB15 SPI2_MOSI 3 SCS 3 P1-24 PB12 SPI2_NSS 4 EXTCOMIN 8 P1-16 PA1 I/O 5 DISP 4 P1-26 PB14 I/O 6 VDDA ----- +5V 7 VDD ----- +5V 8 EXTMODE ----- High に接続 9 VSS ----- GND 10 VSSA ----- GND 次ページに続く 3
2) LS027B4DH01 接続基板を使用して LCD LS027B4DH01 を接続しているようす LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が消えたりします 繊細なので気を付けてください 3) LS027B4DH01 接続基板の回路図 4
3. プログラム実行時の動作 1) プログラムを実行すると基板上の LED LD3( 緑 ) が 1 秒点灯 / 2 秒消灯で点滅します 2) LCD に初期画面が次のように表示されます プロジェクトサンプル STM32L_LS027B4DH01 では初期画面を表示する以外は 100mSec ごとに COM 反転動作を行うのみで他の動作は行いません 上から ASCII 16 x 16 font ASCII 8 x 8 font How are you? I m fine thank you. と表示しています 5
4. プロジェクトの構成プロジェクト STM32L_LS027B4DH01 を開いて左側のプロジェクト エクスプローラーを開いた状態を以下に示します 4.1. 独自に追加したソースフォルダ独自に追加したソースフォルダについて簡単に説明します 1) CommonModules 共通に使用する処理のモジュールを記述しています 2) Handle Peripheral の初期化と設定などを行っています a) HandleTIM.h HandleTIM.c タイマ割り込みを使用するために タイマの初期設定を記述しています b) HandleSPI.h HandleSPI.c SPI の初期化を行います SPI は LCD LS027B4DH01 にデータを送信するのに使用します SPI2 を使用しています 3) LS027B4DH01 LCD LS027B4DH01 を制御するための I/O の初期化 LS027B4DH01 の初期化 および表示処理を記述しています また 8 x 8 および 16 x 16 の ASCII 文字フォントのヘッダファイルを格納してあります 4) UserPrograms Status LED(LD3) に使用している I/O の初期設定と点滅処理を記述しています 6
4.2. ルートのファイルルートの中の特に重要なファイルについて説明します 1) main.c main モジュールが記述されています プログラムはここから開始します I/O と Timer および LS027B4DH01 の初期設定モジュールの呼び出し および初期表示のために表示モジュールの呼び出しを行っています 2) stm32f4xx_it.c 割り込み処理を記述するファイルです このプロジェクトでは Timer2 割り込みと SPI 割り込み処理を記述しています 6. 主なモジュールの説明 6.1. HandleTIM 1) Timer2 初期化 //------------------------------------------------------------------------------ //Timer2 初期化 //------------------------------------------------------------------------------ // 引数 : // uint16_t uint16_tim_pulse1 : Timer2 CH1 インターバル // uint16_t uint16_tim_pulse2 : Timer2 CH2 インターバル // uint16_t uint16_tim_pulse3 : Timer2 CH3 インターバル // uint16_t uint16_tim_pulse4 : Timer2 CH4 インターバル //------------------------------------------------------------------------------ void InitializeTimer2(uint16_t uint16_tim_pulse1, uint16_t uint16_tim_pulse2, uint16_t uint16_tim_pulse3, uint16_t uint16_tim_pulse4); 2) Timer2 割り込み禁止 //Timer2 割り込み禁止 void DisableIrqTim2(void); 3) Timer2 割り込み許可 //Timer2 割り込み許可 void EnableIrqTim2(void); 7
6.2. main.c 1) 使用するクロックの初期化 void RCC_Configuration(void); 2) I/O の初期化 void Init_GPIOs(void); 6.3. UserPrograms 1) LED に使用する I/O の初期化 //Status LED ポート初期化 void InitializePortStatusLED(void); 2) StatusLED の点滅点滅一回の処理 //Status LED 点滅 void BlinkStatusLED(uint16_t uint16_timeon, uint16_t uint16_timeoff); 8
6.4. LS027B4DH01 1) LS027B4DH01 に使用する I/O Port と SPI の初期化および LS027B4DH01 の初期化 //Initialize LCD LS027B4DH01 void InitLS027B4DH01(void); 2) LS027B4DH01 の文字表示 CPU STM32L152RB の内蔵 RAM の容量は 16Kbyte しかないので 一回に一行ずつ表示します //LCD 1 行表示 : LS027B4DH01 // 引数 : // int16_t int16_type : 表示選択 // 0 : 通常表示 // 1 : 反転表示 // int16_t int16_fill : 動作選択 // 0 : puint8_dataの先頭から指定文字数分の内容をセットする // 1 : puint8_data の先頭文字を指定文字数セットする // uint16_t uint16_selectfont : フォント選択 // 0 : 8 x 8 ASCII font // 1 : 16 x 16 ASCII font // uint16_t uint16_row : 表示開始行 // uint16_t uint16_column : 表示開始桁 // uint16_t uint16_length : 表示データ数 // uint8_t *puint8_data : 表示データ Buffer のポインタ // 戻り値 : // 0 : OK 終了 // 1 : NG 終了 int16_t DispChar1RowLS027B4DH01(int16_t int16_type, int16_t int16_fill, uint16_t uint16_selectfont, uint16_t uint16_row, uint16_t uint16_column, uint16_t uint16_length, const uint8_t *puint8_data) 9
3) ASCII 8 x 8 font 文字データのセット // 描画 Buffer にデータをセット 8 x 8 Font : LS027B4DH01 // int16_t int16_type : // 0 : 通常表示 // 1 : 反転表示 // int16_t int16_fill : 動作選択 // 0 : uint8_t *puint8_data のにセットされているデータを uint16_t uint16_length の数だけ描画 Buffer に書き込む // 1 : 描画 Buffer を uint16_t uint16_length の数だけ uint8_t *puint8_data の先頭データで埋める // uint16_t uint16_row : 表示開始行 // uint16_t uint16_column : 表示開始桁 // uint16_t uint16_length : 表示データ数 // uint8_t *puint8_data : 表示データ Buffer のポインタ void SetDrawBuffer8x8FontLS027B4DH01(int16_t int16_type, int16_t int16_fill, uint16_t uint16_row, uint16_t uint16_column, uint16_t uint16_length, uint8_t *puint8_data); 4) ASCII 16 x 16 font 文字データのセット // 描画 Buffer にデータをセット 16 x 16 Font : LS027B4DH01 // int16_t int16_type : 表示選択 // 0 : 通常表示 // 1 : 反転表示 // int16_t intfill : 動作選択 // 0 : uint8_t *puint8_data のにセットされているデータを uint16_t uint16_length の数だけ描画 Buffer に書き込む // 1 : 描画 Buffer を uint16_t uint16_length の数だけ uint8_t *puint8_data の先頭データで埋める // uint16_t uint16_row : 表示開始行 // uint16_t uint16_column : 表示開始桁 // uint16_t uint16_length : 表示データ数 // uint8_t *puint8_data : 表示データ Buffer のポインタ void SetDrawBuffer16x16FontLS027B4DH01(int16_t int16_type, int16_t int16_fill, uint16_t uint16_row, uint16_t uint16_column, uint16_t uint16_length, uint8_t *puint8_data); 10
5) LCD 表示 //-------------------------------------------------------------------------------------------- // 文字データ 1 行表示 : LS027B4DH01 : Buffer は 1 行分のみ //-------------------------------------------------------------------------------------------- // 引数 : // uint16_t uint16_selectfont : フォント選択 // 0 : ASCII 8 x 8 font // 1 : ASCII 16 x 16 font // uint16_t uint16_row : 表示開始行 // uint8_t *puint8_data : 表示データ Buffer のポインタ // 戻り値 : // 0 : OK 終了 // 1 : NG 終了 //-------------------------------------------------------------------------------------------- int16_t DispOneRowLS027B4DH01(uint16_t uint16_selectfont, uint16_t uint16_row, uint8_t *puint8_data); 6) COM 反転処理グローバル変数 GLB_uint16_TimerReverseCOM を使用して Timer2 割り込みで 100mSec ごとに呼び出すようにしています //----------------------------------------------------------- //COM 反転 //----------------------------------------------------------- // Timer2 割り込み内で GLB_uint16_TimerReverseCOM をデクリメントして // 値が 0 になったとき呼び出される //----------------------------------------------------------- void ReverseCOM_LS027B4DH01(int16_t int16_interval); 11
7. 表示フォントについて 7.1. ASCII 8 x 8 font ASCII 8 x 8 font は tri_s_font8x8ascii.h としてプログラムに埋め込まれています 7.2. ASCII 16 x 16 font ASCII 16 x 16 font は tri_s_font16x16ascii.h としてプログラムに埋め込まれています 12
改訂履歴 V001 2014/02/04 初版 V002 2014/03/30 誤記訂正 説明追加 13