Previous: 2.3.4. 実験のためのサンプルプログラム |
Up: 2.3.4. 実験のためのサンプルプログラム |
Next: 2.3.4.2. 読み込み用関数 |
これまでのサンプルプログラムでは、GPIOの初期化のためにGPIO_Configuration関数を使用していました。今回は他にGPIO_Out_Configuration関数、GPIO_In_Configuration関数を用意しています。GPIO_Configuration関数はクロックの供給と、GPIO_Xポートのピン以外のピンの初期化を行っています。GPIO_Out_Configuration関数はGPIO_Xポートのピンを出力用に設定し、GPIO_In_Configuration関数GPIO_Xポートのピンを入力用に設定します。これらの関数の中身自体は、これまでに紹介したコードと特に変わりはありません。
//** ? * @brief? Configure the GPIO Pins for data as output ? * @param? None ? * @retval : None ? */ void GPIO_Out_Configuration(void) { ? GPIO_InitTypeDef GPIO_InitStructure;
? /* Configure GPIO for GPIO_X */ ? GPIO_InitStructure.GPIO_Pin = GPIOX_0_PIN | GPIOX_1_PIN | GPIOX_2_PIN | ??????????????????????????????? GPIOX_3_PIN | GPIOX_4_PIN | GPIOX_5_PIN | ?? ?????????????????????????????GPIOX_6_PIN | GPIOX_7_PIN ; ? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ? GPIO_Init(GPIOX_PORT, &GPIO_InitStructure); }
/** ? * @brief? Configure the GPIO Pins for data as input ? * @param? None ? * @retval : None ? */ void GPIO_In_Configuration(void) { ? GPIO_InitTypeDef GPIO_InitStructure;
? /* Configure GPIO for GPIO_X */ ? GPIO_InitStructure.GPIO_Pin = GPIOX_0_PIN | GPIOX_1_PIN | GPIOX_2_PIN | ???????????????????? ???????????GPIOX_3_PIN | GPIOX_4_PIN | GPIOX_5_PIN | ??????????????????????????????? GPIOX_6_PIN | GPIOX_7_PIN ; ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; ? GPIO_Init(GPIOX_PORT, &GPIO_InitStructure); } |
ここで注意したいのは、ポートを出力として設定するタイミングです。今回接続するLCDモジュールは、R/WがHレベルになると、データバス(DB0?DB7)からデータが出力されます。このときマイコン側もピンが出力設定になっていると、電気的にショートしてマイコンやLCDモジュールが破壊されてしまう危険があります。
例えばマイコン側の出力ピンがHレベルになっている場合には、マイコン内部でピンが+電源に接続されています。そしてモジュール側でピンがLレベルになっている場合には、そのピンは?電源に接続されています。そうするとこれらのピンが接続されてしまうと、結局は、+電源と-電源が直接に接続されたのと同じになってしまうのです。
そのためマイコン側のポートを出力として設定する前には、LCDモジュール側を確実に入力に設定(R/WをLレベルにする)しておく必要があります。
なおこの問題はLCDのモジュールに限ったことではなく、データの出力と入力を兼用するデバイス全般との接続において注意すべきポイントです。
Previous: 2.3.4. 実験のためのサンプルプログラム |
Up: 2.3.4. 実験のためのサンプルプログラム |
Next: 2.3.4.2. 読み込み用関数 |