做485实验的时候,发送数据的程序是从串口实验复制过来的,并没有按照例程来。结果发现,每次硬件复位时发送的数据第一个字节都会丢失,对照例程才知道了问题所在,
例程中的485程序是这样的。
.......
for(t=0;t<len;t++) //循环发送数据
{
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
USART_SendData(USART2,buf[t]);
}
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
.......
我按照串口实验写的是这样的:
for(t=0;t<len;t++) //循环发送数据
{
USART_SendData(USART2,buf[t]);
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
}
硬件复位后TC的值为1,TC清零的办法如下:
所以如果按照我的写法,虽然先执行了发送第一条语句的指令,但是此时TC=1,发送并不成功,再继续执行则发送的是第二个数据。
而按照例程,执行这两句后
while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);
USART_SendData(USART2,buf[t]);
TC被清零,同时发送数据。
综上所述,硬件复位后TC为1,而当TC为1时,不能发送数据。
网上相关的帖子在这里:
STM32串口第一个字节丢失问题的分析过程
http://blog.csdn.net/kevinhg/article/details/40991655
一周热门 更多>