ligang 发表于 2014-1-20 13:41:34

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]
查看完整版本: STM32串口初始化和FSMC驱动LCD初始化的诡异现象