对于主函数来数,只需要
int main(void)
{
SystemInit();
SysTick_Init();
LCD_Init();
while(1){
Delay(10);
}
}
即可,初始化系统,系统时钟,初始化LCD屏。
system_stm32f4xx.c文件中有SystemInit()函数,里面的内容不用改,直接拿来可以用。
SysTick_Init函数是自己实现的
void SysTick_Init(void)
{
while(SysTick_Config(SystemCoreClock/1000000)!=0); //设置系统节拍时钟为1us中断一次
}
下面是关键的LCD初始化函数
首先,需要知道,硬件是如何连接的,下面是我的连接线方式:
PD14 -----FSMC_D0 ----D0
PD15 -----FSMC_D1 ----D1
PD0 -----FSMC_D2 ----D2
PD1 -----FSMC_D3 ----D3
PE7 -----FSMC_D4 ---D4
PE8 -----FSMC_D5 ---D5
PE9 -----FSMC_D6 ---D6
PE10 -----FSMC_D7 ----D7
PE11 -----FSMC_D8 ----D8
PE12 -----FSMC_D9 ----D9
PE13 -----FSMC_D10 ----D10
PE14 -----FSMC_D11 ----D11
PE15 -----FSMC_D12 ----D12
PD8 -----FSMC_D13 ----D13
PD9 -----FSMC_D14 ----D14
PD10 -----FSMC_D15 ----D15
PD4 -----FSMC_NOE -----RD
PD5 -----FSMC_NWE ----WR
PD7 -----FSMC_NE1 ----CS
PE3 -----FSMC_A19 ----RS
没有背光控制,我直接让背光常亮,RESET引脚我连接到了单片机RESET引脚上了。使用了NE1。
#define LCD_RAM *(vu16*)((u32)0x60100000) //disp Data ADDR
#define LCD_REG *(vu16*)((u32)0x60000000) //disp Reg ADDR
下面是我的能用的 初始化 函数
void LCD_Init(void)
{
LCD_FSMC_Config();
delay_nms(50);
LCD_WR_REG(0x0011); //退出睡眠模式,0x0010为进入
delay_nms(50);
LCD_WR_REG(0x0013); //进入普通显示模式
LCD_WR_REG(0x00D0); //设置电源参数,后续3个参数
LCD_WR_DATA(0x0007); //1.0xVci 07
LCD_WR_DATA(0x0042); //40
LCD_WR_DATA(0x0018); //1c
LCD_WR_REG(0x0