独闷闷网

标题: STM32串口初始化和FSMC驱动LCD初始化的诡异现象 [打印本页]

作者: ligang    时间: 2014-1-20 13:41
标题: 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);
}






欢迎光临 独闷闷网 (http://www.dumenmen.com/) Powered by Discuz! X3.2