tri_s_tg12864_vcp の説明 2014/02/05 飛石伝ひ CPU 基板 の LCD TG12864 の表示プログラムです 漢字表示 (JIS208) を行うことができます USB の VCP ( 仮想 COM ポート ) を使用して非同期シリアル通信により 表示試験を行うことができます 無料の開発ツール Atollic TrueSTUDIO for ARM Lite 4.2.0 で作成したプロジェクトです プログラムの開始番地は 0x08010000 です デバッグが可能です PC アプリケーションの Access_LCD_TG12864 を使用して USB の VCP( 仮想 COM ポート ) の非同期シリアル通信により 飛石伝ひ CPU 基板 に表示コマンドを送信して LCD TG12864 に ASCII 文字と漢字を表示できます 目次 1. LCD TG12864 について... 2 2. LCD TG12864 の接続信号... 3 3. USB の VCP( 仮想 COM ポート ) による接続... 4 4. プログラム実行時の動作と確認... 5 4.1. 実行時の動作... 5 4.2. 動作確認... 6 1) Access_LCD_TG12864 アプリケーションの起動画面... 6 2) COM ポートと通信速度の選択... 7 3) 表示クリア... 9 4) 表示文字の種類... 10 5) 表示桁数と表示行数... 10 6) LCD 表示の例... 11 5. プロジェクトの構成... 13 5.1. 独自に追加したソースフォルダ... 13 5.2. ソースフォルダ src のファイル... 14 6. 主なモジュールの説明... 14 6.1. HandleTimer2... 14 6.2. main.c... 15 6.3. UserPrograms... 15 6.4. CommunicateHOST... 16 6.5. TG12864... 18 7. 表示フォントについて... 20 7.1. ASCII 6 x 8 font... 20 7.2. 全角 8 x 8 font... 20 7.3. 全角 12 x 12 font... 20 1
1. LCD TG12864 について TG12864 は 128dot x 64dot のグラフィック LCD です 飛石伝ひ CPU 基板 では 次の 2 種類の LCD を推奨しています どちらも秋月電子通商で購入できます 1) TG12864B-02WWBV 外形サイズ : 93 x 70 x 11.8mm 2) TG12864E-02A 外形サイズ : 54 x 50 x 9mm 2
2. LCD TG12864 の接続信号 飛石伝ひ CPU 基板 の LCD TG12864 に使用する信号は以下の通りです TG12864 信号表飛石伝ひ I/F 基板 P6 ピン番号 信号名 CPU 機能名 CPU 信号名 飛石伝ひ CPU 基板 コネクタピン番号 1 VSS GND GND 2 VDD ----- ----- +5V 3 VO( コントラスト ) ----- ----- 液晶駆動電圧 4 LCD_RS I/O PE8 P2-28 5 LCD_RW I/O PE9 P2-27 6 LCD_E I/O PE10 P2-26 7 LCD_DB0 I/O PE0 P1-14 8 LCD_DB1 I/O PE1 P1-13 9 LCD_DB2 I/O PE2 P1-12 10 LCD_DB3 I/O PE3 P1-11 11 LCD_DB4 I/O PE4 P1-10 12 LCD_DB5 I/O PE5 P1-9 13 LCD_DB6 I/O PE6 P1-8 14 LCD_DB7 I/O PE7 P2-29 15 LCD_CS1 I/O PE11 P2-25 16 LCD_CS2 I/O PE12 P2-24 17 LCD_RST I/O PE13 P2-23 18 VEE(-10V 出力 ) ----- ----- 液晶駆動用電圧 19 LCD_A( アノード +5V) ----- ----- BackLight 20 LCD_K( カソード 0V) ----- ----- BackLight 備考 飛石伝ひ I/F 基板 と LCD TG12864 との接続のようす TG12864B-02WWBV TG12864E-02A 3
3. USB の VCP( 仮想 COM ポート ) による接続 USB の VCP( 仮想 COM ポート ) による PC と 飛石伝ひ CPU 基板 との接続は以下のようになります なお USB の VCP( 仮想 COM ポート ) を使用するための VCP ドライバのインストールについては インストール のページの [ 1. VCP(Virtual COM Port : 仮想 COM ポート ) ドライバ のインストール ] の部分をご覧ください PC A USB ケーブル : 電源供給および VCP( 仮想 COM ポート ) 接続のため USB ポート Mini B TG12864 P6 I/F 基板 図 3. 4
4. プログラム実行時の動作と確認 4.1. 実行時の動作 1) プログラムを実行すると基板上の LED1( 緑 ) が 1 秒点灯 2 秒消灯で点滅します 2) LCD に初期画面が次のように表示されます TG12864B-02WWBV TG12864E-02A 上から 全角 8 x 8 font(jis208) 全角 12 x 12 font(jis208) ASCII 6 x 8 font で表示しています 3) USB(VCP) で LCD 表示コマンドを受信すると LCD 上の指定された位置に受信した文字を表示します 5
4.2. 動作確認 飛石伝ひ CPU 基板 に TG12864 の表示コマンドを送信するツール Access_LCD_TG12864 アプリケーションを使用して LCD の表示試験を行うことができます USB(VCP) を使用して 飛石伝ひ CPU 基板 と送受信を行います 1) Access_LCD_TG12864 アプリケーションの起動画面 Access_LCD_TG12864 アプリケーションを起動すると以下のダイアログが表示されます 6
2) COM ポートと通信速度の選択 COM 選択の ComboBox で COM を選択します 確認のメッセージが表示されるので よい場合は [ はい (Y)] ボタンをクリックします 次ページに続く 7
この例では COM3 に設定しました とメッセージが表示されています 通信速度は 9600bps でよいのでこのままにしておきます 次ページに続く 8
3) 表示クリア [ 表示クリア ] ボタンをクリックすると LCD 表示が全画面クリアされます 表示 Type の RadioButton で通常表示 / 反転表示の選択により 全面クリア / 全 dot 表示を行います 通常表示 反転表示 表示クリアを行うと OK : Clear Display LCD とメッセージが表示されます 9
4) 表示文字の種類表示文字は次の 3 種類があります a) ASCII 6 x 8 font : 6dot x 8dot の ASCII 文字です b) 全角 8 x 8 font : 8dot x 8dot の全角文字です JIS208 コードで漢字が表示できます 美咲フォントを使用させていただきました 8dot x 8dot なので正確には文字を表現できないのでそれらしく見えるように工夫されています c) 全角 12 x 12 font : 12dot x 12dot の全角文字です JIS208 コードで漢字が表示できます 東雲フォントを使用させていただきました 漢字をほぼ正確に表現しています 表示文字の種類は 表示文字選択の ComboBox で選択することができます 5) 表示桁数と表示行数表示文字の選択を変更すると それぞれ表示可能な行数と桁数が異なるので 行と桁の ComboBox の選択範囲が変更になります 表示文字の種類による それぞれの表示桁数と表示行数は以下の通りです a) ASCII 6 x 8 font : 21 桁 x 8 行 b) 全角 8 x 8 font : 16 桁 x 8 行 c) 全角 12 x 12 font : 10 桁 x 5 行 10
6) LCD 表示の例表示データ TextBox に文字を入力して [LCD 表示 ] ボタンをクリックすると LCD に文字を表示することができます 次の 3 パターンの文字を表示してみます a) ASCII 6 x 8 0 行目 3 桁目 : Take it easy! b) 全角 8 x 8 2 行目 0 桁目 : 今日が駄目なら明日にしましょ c) 全角 12 x 12 3 行目 0 桁目 : 明日が駄目ならあさってにしましょ 表示結果は以下の通りです tri_s_tg12864 アプリケーションの実行結果のメッセージは次ページのようになります 11
12
5. プロジェクトの構成プロジェクトを開いて 左側の Project Exploler のを開いた状態です 5.1. 独自に追加したソースフォルダ独自に追加したソースフォルダについて簡単に説明します 1) CommonModules 共通に使用する処理のモジュールを記述しています 2) CommunicateHOST USB(VCP) の通信処理を記述しています LCD 表示コマンドを受信して LCD 表示を行います 3) Handle Peripheral の初期化と設定などを行っています a) HandleTimer2.h HandleTimer2.c タイマ割り込みを使用するために タイマの初期設定を記述しています 4) TG12864 LCD TG12864 を制御するための I/O の初期化 TG12864 の初期化 および表示処理を記述しています 5) UserPrograms Status LED に使用している I/O の初期設定と点滅処理を記述しています 6) VCP USB の VCP( 仮想 COM ポート ) の処理です 7) STM32_USB_Device_Library と STM32_USB_OTG_Driver フォルダ Libraries の下にあります STMicroelectronics 社から提供されている USB のための Library です 13
5.2. ソースフォルダ src のファイルフォルダ src の中の特に重要なファイルについて説明します 1) main.c main モジュールが記述されています プログラムはここから開始します I/O と Timer および TG12864 の初期設定と USB(VCP) による送受信モジュールの呼び出しを記述しています 2) stm32f4xx_it.c 割り込み処理を記述するファイルです このプロジェクトでは Timer2 割り込みと USB の割り込み処理を記述しています 6. 主なモジュールの説明 6.1. HandleTimer2 1) Timer2 初期化 //------------------------------------------------------------------------------ //Timer2 初期化 //------------------------------------------------------------------------------ // 引数 : // uint16_t uinttim_pulse1 : Timer2 CH1 インターバル // uint16_t uinttim_pulse2 : Timer2 CH2 インターバル // uint16_t uinttim_pulse3 : Timer2 CH3 インターバル // uint16_t uinttim_pulse4 : Timer2 CH4 インターバル //------------------------------------------------------------------------------ void InitializeTimer2(uint16_t uinttim_pulse1, uint16_t uinttim_pulse2, uint16_t uinttim_pulse3, uint16_t uinttim_pulse4); 2) Timer2 割り込み禁止 //Timer2 割り込み禁止 void DisableIrqTim2(void); 3) Timer2 割り込み許可 //Timer2 割り込み許可 void EnableIrqTim2(void); 14
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); //Action LED ポート初期化 void InitializePortActionLED(void); 2) StatusLED の点滅点滅一回の処理 //Status LED 点滅 void BlinkStatusLED(uint16_t uinttimeon, uint16_t uinttimeoff); 15
6.4. CommunicateHOST 1) USB の初期化 //---------------------------------------------------- //HOST Communication 初期化 : USB を VCP として使用するための初期化を行います //---------------------------------------------------- void InitializeCommunicateHOST(void); 2) HOST 通信処理受信処理を行い 受信コマンドを処理して応答データを送信します //---------------------------------------------------------------- //HOST 通信処理 : USB の VCP 通信 //---------------------------------------------------------------- void CommunicateHOST(void) 3) VCP 送信処理 //-------------------------------------------------------------------- //VCP 送信処理 //-------------------------------------------------------------------- // 引数 : // uint16_t uintsendlength : 送信データ数 // uint8_t *puchrdata : 送信データのポインタ //-------------------------------------------------------------------- void SendVCP(uint16_t uintsendlength, uint8_t *puchrsenddata); 4) VCP 受信処理 //-------------------------------------------------------------------- // VCP 受信処理 //-------------------------------------------------------------------- // 引数 : // uint8_t *puchrreceivebuffer : 受信データを格納する Buffer のポインタ // 戻り値 : // -1 : 受信なし // 0 : Error // 1 以上 : 受信 byte 数 //-------------------------------------------------------------------- int16_t ReceiveVCP(uint8_t *puchrreceivebuffer); 16
5) HOST コマンドの実行受信コマンドを判定してそれぞれの処理モジュールを呼び出します //------------------------------------------------------------------------------------ // HOST コマンドを実行する //------------------------------------------------------------------------------------ // 引数 : // uint16_t uintreceivelength : 受信データ数 // uint8_t *puchrreceivedata : 受信データが格納されている Buffer のポインタ // uint8_t *puchrsenddata : 応答送信データを格納する Buffer のポインタ // 戻り値 : 応答送信データ数 //------------------------------------------------------------------------------------ uint16_t ExecuteCommandHOST(uint16_t uintreceivelength, uint8_t *puchrreceivedata, uint8_t *puchrsenddata); 6) LCD 表示処理 //-------------------------------------------------------------------- // LCD 文字表示 //-------------------------------------------------------------------- // 引数 // int16_t intdatalength : 表示パラメータデータ数 // uint8_t *puchrparameter : 表示パラメータデータが格納された Buffer のポインタ // uint8_t *puchrsendbuff : 応答送信データを格納する Buffer のポインタ // 戻り値 : 応答送信データ数 //-------------------------------------------------------------------- // 表示パラメータ : // [ 表示 Font : 1byte],[ 表示 Type : 1byte],[ 開始行 : 4byte],[ 開始桁 : 4byte],[ 表示文字データ : 可変長 ] //-------------------------------------------------------------------- uint16_t ComActDisplayCharacterLCD(int16_t intparameterlength, uint8_t *puchrparameter, uint8_t *puchrsenddata); 17
6.5. TG12864 1) TG12864 に使用する I/O Port の初期化 //TG12864 Port 初期化 void InitializePortTG12864(void); 2) TG12864 の初期化 //TG12864 初期化 void InitializeTG12864(void); 3) ASCII 6 x 8 font 文字の表示 //ASCII 文字 LCD 複数行表示 : 1line 21 文字表示だが intlength が 21 文字を超えるとき複数行にまたがって表示する // 引数 : // int16_t inttype : 表示 Type // 0 : 通常表示 // 1 : 反転表示 // int16_t intline : 表示開始行 // int16_t intcolumn : 表示開始桁 // int16_t intlength : 表示文字数 // const uint8_t *puchrdata : 表示文字が格納された Buffer のポインタ void DisplayASCII6x8_TG12864(int16_t inttype, int16_t intline, int16_t intcolumn, int16_t intlength, const uint8_t *puchrdata); 18
4) 全角 8 x 8 font 文字の表示このプログラムでは CPU 内部の Flash Memory の 0x08080000 番地から書き込んだ 8 x 8 の Binary Font を参照して全角 8 x 8 font 文字を表示します // 2byte Code 全角文字 8 x 8 Font LCD 複数行表示 // 1line 16 文字表示だが intlength が 16 文字を超えるとき複数行にまたがって表示する // 引数 : // int16_t inttype : 表示 Type // 0 : 通常表示 // 1 : 反転表示 // int16_t intline : 表示開始行 // int16_t intcolumn : 表示開始桁 // int16_t intlength : 表示文字数 // const uint8_t *puchrdata : 表示文字が格納された Buffer のポインタ void Display2byteCode8x8_TG12864(int16_t inttype, int16_t intline, int16_t intcolumn, int16_t intlength, const uint8_t *puchrdata); 5) 全角 12 x 12 font 文字の表示このプログラムでは CPU 内部の Flash Memory の 0x08090000 番地から書き込んだ 12 x 12 の Binary Font を参照して全角 12 x 12 font 文字を表示します //2byte Code 全角文字 12 x 12 Font LCD 複数行表示 : 1line 10 文字表示だが intlength が 10 文字を超えるとき複数行にまたがって表示する // 引数 : // int16_t inttype : 表示 Type // 0 : 通常表示 // 1 : 反転表示 // int16_t intline : 表示開始行 // int16_t intcolumn : 表示開始桁 // int16_t intlength : 表示文字数 // const uint8_t *puchrdata : 表示文字が格納された Buffer のポインタ void Display2byteCode12x12_TG12864(int16_t inttype, int16_t intline, int16_t intcolumn, int16_t intlength, const uint8_t *puchrdata); 19
7. 表示フォントについて 7.1. ASCII 6 x 8 font ASCII 6 x 8 font は tri_s_font6x8_90.h としてプログラムに埋め込まれています 7.2. 全角 8 x 8 font 全角 8 x 8 font は 8 x 8 用の Binary フォントファイルのデータを CPU 内の Flash Memory の 0x08080000 番地から書き込んだものを参照しています 7.3. 全角 12 x 12 font 全角 12 x 12 font は 12 x 12 用の Binary フォントファイルのデータを CPU 内の Flash Memory の 0x08090000 番地から書き込んだものを参照しています Binary フォントデータを Flash Memory に書き込むためのツール WriteBinaryToFlash アプリケーションを用意しています [ 飛石伝ひ CPU 基板 のプロジェクトサンプル ] のページから TG12864 プロジェクトの説明とダウンロード のページに行くと WriteBinaryToFlash アプリケーション の説明があります 20