各位,求助一下,我用原子的LCD例程移植到自己做的板子上,LCD_RS接 PD11 (FSMC_A16),LCD_CS接PD7(FSMC_NE1),其他都和原子哥的一样,但是运行后一直程序卡在LCD_WriteReg(0x0000,0x0001);查看代码这里没有while 语句,就不知道为什么只停在这里,搞了好久了,一直没搞好,请各位朋友帮忙解惑下~~谢谢
[mw_shl_code=c,true]void LCD_Init(void)
{
RCC->AHBENR|=1<<8; //使能FSMC时钟
RCC->APB2ENR|=1<<3; //使能PORTB时钟
RCC->APB2ENR|=1<<5; //使能PORTD时钟
RCC->APB2ENR|=1<<6; //使能PORTE时钟
GPIOD->CRL&=0XFFFFF0FF; //PD2 推挽输出 背光
GPIOD->CRL|=0X00000300;
/////////////////////////////////////////////////////////////////////////
//PORTD复用推挽输出
GPIOD->CRH&=0X00FF0000; //PD11->LCD_RS (FSMC_A16)
GPIOD->CRH|=0XBB00BBBB;
GPIOD->CRL&=0X0F00FF00;
GPIOD->CRL|=0XB0BB00BB; //PD7->LCD_CS (FSMC_NE1)
//涉及FSMC的都改为复用开漏输出
///////////////////////////////////////////////////////////////////////////
//PORTE复用推挽输出
//PORTE复用推挽输出
GPIOE->CRH&=0X00000000;
GPIOE->CRH|=0XBBBBBBBB;
GPIOE->CRL&=0X0FFFFFFF;
GPIOE->CRL|=0XB0000000;
//涉及FSMC的都改为复用开漏输出
//////////////////////////////////////////////////////////////////////////////////
//寄存器清零
//bank1有NE1~4,每一个有一个BCR+TCR,所以总共八个寄存器。
//这里我们使用NE1 ,也就对应BTCR[0],[1]。
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<<4; //存储器数据宽度为16bit
//操作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
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
delay_ms(500); // delay 50 ms
LCD_WriteReg(0x0000,0x0001); //程序就一直卡在这里不动,查看了硬件,暂没有发现问题
delay_ms(50); // delay 50 ms
lcddev.id = LCD_ReadReg(0x0000); [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>