STM32驱动5V的12864LCD,控制脚和数据较最好接到STM32能容忍5v的IO口,外加上拉电阻时,控制脚和数据脚设置成开漏输出。不加上拉电阻时,控制脚设置为推拉输出,数据脚输出时,设置成推拉输出,输入时设置成上拉输入。加不加上拉电阻都能点亮LCD,关键是脚位配置。
GPIOE的PE0-PE7做数据线,控制线定义如下:
//————-PORTE———————
#define R_S GPIO_Pin_8
#define R_W GPIO_Pin_9
#define EN GPIO_Pin_10
#define _CS1 GPIO_Pin_11
#define _CS2 GPIO_Pin_12
#define _RST GPIO_Pin_13
首先IO口初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_ResetBits(GPIOE, EN );
GPIO_SetBits(GPIOE,_CS1 | _CS2 );
注意_CS1,_CS2初始化是一定要拉高,否则检测忙信号时,忙信号会一直是高。我就是因为这个问题卡了好几天。
以下是LCD驱动程序:
//指令宏定义
#define Display_On 0x3f //显示开指令
#define Display_Off 0x3e //显示关指令
#define Y_Col_Addr 0x40 //定位到第0列指令(列起始地址)(0-63)
#define X_Page_Addr 0xb8 //定位到第0页指令(页起始地址)(0-7)
#define Start_Line 0xc0 //定位从DDROM中的第0行开始往屏幕上显示