我用STM32VET6连接液晶屏,三根地址线分别连接A16 A17 A18. 液晶屏的CS连接NE1 WR连接NEW RD连接NOE 数据线D0-D8分别连接STM32VET6的D0-D8(注意我的液晶屏是8位数据),下面是的修改原子哥的初始化函数
#define port6 ((u32)0x60000000) //x地址低
#define port1 ((u32)0x60010000) //x地址高
#define port2 ((u32)0x60020000) //y地址低
#define port3 ((u32)0x60030000) //y地址高
#define port4 ((u32)0x60040000) //前景色
#define port5 ((u32)0x60050000) //背景色
#define port0 ((u32)0x60060000) //数据
#define port7 ((u32)0x60070000) //状态寄存器
void LCD_Init(void)
{
RCC->AHBENR|=1<<8; //使能FSMC时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
RCC->APB2ENR|=1<<8; //使能PORTG时钟
RCC->APB2ENR|=1<<0; //使能AFIO时钟
// GPIOB->CRL&=0XFFFFFFF0;//PB0 推挽输出 背光
// GPIOB->CRL|=0X00000003;
//PORTD复用推挽输出
GPIOD->CRH&=0X00FFF000;
GPIOD->CRH|=0XBB000BBB;
GPIOD->CRL&=0XFF00FF00;
GPIOD->CRL|=0X00BB00BB;
//PORTE复用推挽输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB;
GPIOE->CRL&=0X0FFFFFFF;
GPIOE->CRL|=0XB0000000;
FSMC_Bank1->BTCR[0]=0X00000000;
FSMC_Bank1->BTCR[1]=0X00000000;
FSMC_Bank1E->BWTR[0]=0X00000000;
//操作BCR寄存器 使用异步模式
FSMC_Bank1->BTCR[0]|=1<<12; //存储器写使能
FSMC_Bank1->BTCR[0]|=1<<14; //读写使用不同的时序
FSMC_Bank1->BTCR[0]|=0<<4; //存储器数据宽度为8bit
//操作BTR寄存器
//读时序控制寄存器
FSMC_Bank1->BTCR[1]|=0<<28; //模式A
FSMC_Bank1->BTCR[1]|=1<<0; //地址建立时间(ADDSET)为2个HCLK 1/36M=27ns
//因为液晶驱动IC的读数据的时候,速度不能太快,尤其对1289这个IC。
FSMC_Bank1->BTCR[1]|=0XF<<8; //数据保存时间为16个HCLK
//写时序控制寄存器
FSMC_Bank1E->BWTR[0]|=0<<28; //模式A
FSMC_Bank1E->BWTR[0]|=0<<0; //地址建立时间(ADDSET)为1个HCLK
//4个HCLK(HCLK=72M)因为液晶驱动IC的写信号脉宽,最少也得50ns。72M/4=24M=55ns
FSMC_Bank1E->BWTR[0]|=3<<8; //数据保存时间为4个HCLK
//使能BANK1,区域4
FSMC_Bank1->BTCR[0]|=1<<0; //使能BANK1,区域1
}
void set_zuobiao()
{
u8 x1,x2;
x1=(col>>8) & 0x03; //x高字节
x2= col & 0x00ff; //x低字节
// LCD->port7=0x04;
// LCD->port6=x2;
// LCD->port1=x1;
*(volatile u8 *) (port7) = 0x04;
*(volatile u8 *) (port6) = x2;
*(volatile u8 *) (port1) = x1;
x1=(row>>8) & 0x03; //y高字节
x2= row & 0x00ff; //y低字节
// LCD->port2=x2;
// LCD->port3=x1;
*(volatile u8 *) (port2) = x2;
*(volatile u8 *) (port3) = x1;
}
void pint() //在屏幕的(0,0)坐标画一个白色的点
{
col=0;row=0;
set_zuobiao();
*(volatile u8 *) (port0) = 0xff;
}
小弟研究了好多天了,我都快崩溃了,接上液晶屏之后没有反应,还请原子哥看看程序是哪个地方出了错误,谢谢了
|