[mw_shl_code=c,true]#define DATAIN LCD_DATAPORT->IDR //数据输入寄存器
#define LCD_BF ((DATAIN)& 0x8000) // 忙状态,数据IO口为PD8-15,故PD15为忙碌标志BF
void LCD_WaitLaisure(void)
{
uint16_t flag=0x00;
LCD_RS_0;
LCD_RW_1;
do
{
LCD_EN_0;
LCD_delayus(5);
LCD_EN_1;
LCD_delayus(5);
flag=(uint16_t)LCD_BF;
LCD_EN_0;
}while(flag);
}
[/mw_shl_code]
用Jlink调试到这里就进入死循环了,也就是LCD一直处于忙碌状态,不明白是什么原因。贴上我的电路图如下:
[mw_shl_code=c,true]void LCD_PORT_Init(void)
{
GPIO_InitTypeDef LCD_port;
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2); //fPCLK1=36MHz
RCC_APB2PeriphClockCmd(LCD_CONTROL_CLOCK | RCC_APB2Periph_AFIO ,ENABLE); //始终使能
RCC_APB2PeriphClockCmd(LCD_DATAPORT_CLOCK | RCC_APB2Periph_AFIO ,ENABLE);
LCD_port.GPIO_Pin = (uint16_t)0x00f0; //
LCD_port.GPIO_Speed= GPIO_Speed_50MHz;
LCD_port.GPIO_Mode = GPIO_Mode_Out_OD;//OD开路输出,接上拉电阻到5V
//LCD_port.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(LCD_DATAPORT,&LCD_port);
//LCD_port.GPIO_Pin = LCD_RESET_Pin | LCD_RS_Pin | LCD_RW_Pin | LCD_EN_Pin;
LCD_port.GPIO_Pin = LCD_RS_Pin | LCD_RW_Pin | LCD_EN_Pin;
LCD_port.GPIO_Speed= GPIO_Speed_50MHz;
LCD_port.GPIO_Mode = GPIO_Mode_Out_OD;//OD开路输出
GPIO_Init(LCD_CONTROL,&LCD_port);
}[/mw_shl_code]
这是我的IO配置函数。
问题纠结了很久了,求助大家帮我看下是程序的问题还是硬件的问题,感激不尽。 |