stm32 串口发送字符串第一个字节丢失的问题
来源:网络整理 网络用户发布,如有版权联系网管删除 2018-07-01
点击上方 “ 畅学电子 ” 一键关注,轻松学习电子知识
使用stm32f205调试串口通讯时,发现一个问题,上电后串口发送字符串的第一个字节会丢失,发送测试数据hello,接收端收到的数据为:ello,第一个字符丢失。用示波器抓取波形,发现第一个数据的波型也是丢失的。
出现问题的代码如下:
while(str[i]!=0)
{
USART_SendData(USART1,str[i]);
i++;
/*Loopuntiltheendoftransmission*/
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET)
{}
}
原因:
1.通过DEBUG查看,在执行USART1_init();串口初始化完成后:TXE,TC是置1的。
2.RM0033中有一段描述,
两者的区别在于:往USART_DR中写数据的时候TXE直接被清零。TC清零则需要先读取USART_SR,然后写USART_DR。
在出现错误的代码执行之前加一句:
USART_GetFlagStatus(USART1,USART_FLAG_TC);就不存在错误了。
当然,直接清零也可以:USART_ClearFlag(USART1,USART_FLAG_TC);
或者用USART_FLAG_TXE标志来判断。
> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >
==> 前往 www.eeskill.com 学习更多知识!
查看评论 回复