マイコン入門spacer ad
トップページに戻る(マイコン徹底入門:STM32で始めるARM/Cortex-M3組み込み開発)
「マイコン徹底入門」とは? |  「マイコン徹底入門」を読む |  ダウンロード |  掲示板 |  筆者の自己紹介


Previous: 2.3.4.2. 読み込み用関数

Up: 2.3.4. 実験のためのサンプルプログラム

Next: 2.3.4.4. 初期化処理


マイコン徹底入門:周辺回路編:STM32のペリフェラルを活用: 2. 汎用入出力(GPIO): 2.3. キャラクタ液晶の利用: 2.3.4. 実験のためのサンプルプログラム:

2.3.4.3. 書き込み用関数

 LCDモジュールへの書き込み用にLCD_Write_Init_Inst関数、LCD_Write_Inst関数、

LCD_Write_Data関数を用意しました。読み込み処理と同じく、書き込みの中心部分の処理は同じなので、LCD_Write_Core関数としてまとめています。命令書き込み用の関数としてLCD_Write_Init_Inst関数とLCD_Write_Inst関数を用意しているのは、初期化処理の最初の段階ではビジーフラグのチェックが行えないので、チェックする関数(LCD_Write_Inst関数)とチェックをしない関数(LCD_Write_Init_Inst関数)に分けたためです。これらの関数を実行することにより命令・データをLCDモジュールに送信できます。

 

/**

? * @brief? Writing instruction without busy flag check

? * @param? WriteData: Data to be written

? * @retval : None

? */

void LCD_Write_Init_Inst(uint8_t WriteData)

{

? //RS=0: Instruction

? GPIO_ResetBits(GPIOY_0_PORT, GPIOY_0_PIN);

 

? LCD_Write_Core(WriteData);

}

 

 

/**

? * @brief? Writing instruction with busy flag check

? * @param? WriteData: Data to be written

? * @retval : None

? */

void LCD_Write_Inst(uint8_t WriteData)

{

 

? while( LCD_Read_Inst() & 0b10000000);

? //RS=0: Instruction

? GPIO_ResetBits(GPIOY_0_PORT, GPIOY_0_PIN);

 

? LCD_Write_Core(WriteData);

}

 

/**

? * @brief? Writing data

? * @param? WriteData: Data to be written

? * @retval : None

? */

void LCD_Write_Data(uint8_t WriteData)

{

 

? while(LCD_Read_Inst() & 0b10000000);

? //RS=1: Data

? GPIO_SetBits(GPIOY_0_PORT, GPIOY_0_PIN);

 

? LCD_Write_Core(WriteData);

}

 これらの関数の中、

while(LCD_Read_Inst() & 0b10000000);

がビジーフラグのチェック部分です。LCD_Read_Inst関数の戻り値に0b10000000AND演算するとビジーフラグ部分のみが残ります。結果ビジーフラグが立っている間だけ待つという処理を行ったことになります。

 書き込み処理もコントローラの既定のタイミングで処理を行っています。ただGPIOからのデータ出力は、RWLレベルにした後、EHレベルにする前に行っています。これはLCDモジュールが読み込みを行うよりも確実に前にデータを出力しておきたいためです。

/**

? * @brief? Writing process common in instruction and data

? * @param? WriteData: Data to be written

? * @retval : None

? */

void LCD_Write_Core(uint8_t WriteData)

{

? //RW=0: Write (Output to LCD)

? GPIO_ResetBits(GPIOY_1_PORT, GPIOY_1_PIN);

? //Wait: Setup time: tAS(40) : 40ns : 3 clocks

? WAIT_3_CLOCK;

? //Set GPIO as output

? GPIO_Out_Configuration();

? //Output Data

? GPIO_Write(GPIOX_PORT, (GPIO_ReadOutputData(GPIOX_PORT) & 0xFF00) | (uint16_t)WriteData);

? //E=1: Enable

? GPIO_SetBits(GPIOY_2_PORT, GPIOY_2_PIN);

? //Wait: Pulse time and holdtime: PWEH(220) + tH(10) : 230ns : 18 clocks

? WAIT_18_CLOCK;

? //E=0: Disable

? GPIO_ResetBits(GPIOY_2_PORT, GPIOY_2_PIN);

? //Wait: tC(500) - PWEH(220) - tH(10) - tAS(40) : 230ns : 18 clocks

? WAIT_18_CLOCK;

}


Previous: 2.3.4.2. 読み込み用関数

Up: 2.3.4. 実験のためのサンプルプログラム

Next: 2.3.4.4. 初期化処理


このページはITと知的財産の法律情報「法務ネット」の管理人が制作・運営しています。
_Toc266801166