移植 原子哥的LCD例程,程序一直停在LCD_WriteReg(0x0000,0x0001),请大家帮忙解惑,谢谢

2019-07-20 10:32发布

各位,求助一下,我用原子的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]


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。