STM32发送首字节丢失

2019-10-14 22:12发布

最近在写串口相关的程序,百度的讲解和数据手册(中文)的讲法就不提了,下面说说依然存在的问题和解决方法。

现象
1.串口初始化时直接TC=0,TC=0。并且加入死循环确定清零。
        USART_ClearFlag(USART2,USART_FLAG_TXE);
        USART_ClearFlag(USART2,USART_FLAG_TC);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=RESET);


2.主函数使用如下代码,尽量避免是其他串口的影响
   temp1=0xa0;
   temp2=0xa0;
    if(USART_GetFlagStatus(USART1,USART_FLAG_TC)==1)   //US1用作printf打印
         temp1=250;    USART_ClearFlag(USART1,USART_FLAG_TC);             if(USART_GetFlagStatus(USART2,USART_FLAG_TC)==1)
        temp2=250;                                               
    USART_SendData(USART2,temp1);       
    while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET);        //读SR       
    USART_SendData(USART2,temp2);       
    while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET);        //读SR       


3.我程序的初始化顺序,我查下来没有发现问题,同事也看了一下,如果有什么没注意的地方希望大家说说。
        RCC_Configuration();
        usart_config(115200);
        NVIC_Configuration();
        SysTick_Init();


4.出现的结果就是
    串口发送的数据temp2是250,证明US2的SR的TC位居然是置1的,所以我推荐发送函数这样处理,每步发送前清零。
void usart_tx(u8 dat)
{
        USART_ClearFlag(USART2,USART_FLAG_TC);               
        USART_SendData(USART2, dat);       
        while(USART_GetFlagStatus(USART2, USART_FLAG_TC)!=SET);        //相当于是读了SR       
}








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