在主程序中使用数组定义了一串数据,然后通过调用串口发送库函数对数组进行字节发送。
定义:char a[]={0xaa,0x02,0x00,0xab};
串口发送部分代码:
for(i=0;i<4;i++)
{
USART_SendData(USART1, a[i]);
while(USART_GetFlagStatus(USART1, USART_FLAG_TC) != SET);
USART_ClearFlag(USART1, USART_FLAG_TC);
}
运行时,在PC机的串口调试助手上显示: 02 00 ab (16进制)
问题:aa这个数据没了!!!!
原因分析: 程序下载是通过串口1进行的,有可能下载程序在最后没有清空TC标志位,导致第一个数据无法正确发送出去。
修改办法:在串口初始化程序中强制清空TC标志位。
莫名问题:其他非下载串口也出现类似的丢第一个字节的问题。
解决办法1: 在数组a[0]给一个无用的数据,让它丢失吧。。。。哈哈
解决办法2:初始化强制清空TC位。