STM32串口初始化和FSMC驱动LCD初始化的诡异现象
先初始化LCD的FSMC,再初始化串口,则正常。如果先初始化串口,再初始化FSMC,则出现以下三种诡异现象:
第一种:先调用串口初始化函数来初始化串口,再初始化FSMC,液晶屏不工作。例如:
int main(void)
{
USART_Config(); //先调用串口初始化函数来初始化串口
lcd_initialize(); // 再LCD初始化
while(1)
{
;
}
}
void USART_Config(void ) //先初始化串口
{
... //省去若干内容
USART_InitStructure.USART_BaudRate = 115200;
...
USART_Init(USART3, &USART_InitStructure);
}
//来自电子开发者论坛
第二种:不调用串口初始化函数,直接在main()函数里写串口初始化的代码,再初始化FSMC,液晶屏却能正常工作。例如:
int main(void)
{
... //省去若干内容
USART_InitStructure.USART_BaudRate = 115200;
...
USART_Init(USART3, &USART_InitStructure); //直接在main()函数里写串口初始化的代码
lcd_initialize(); // 再LCD初始化
while(1)
{
;
}
}
第三种:把原来void的串口初始化函数增加一个形参接口,来初始化串口,再初始化FSMC,液晶屏能工作,但是刷屏速度明显下降。例如:
int main(void)
{
USART_Config(115200); //先调用带形参的串口初始化函数来初始化串口
lcd_initialize(); // 再LCD初始化
while(1)
{
;
}
}
void USART_Config(unsigned long baudrate_d ) //先初始化串口
{
... //省去若干内容
USART_InitStructure.USART_BaudRate = baudrate_d;
...
USART_Init(USART3, &USART_InitStructure);
}
页:
[1]