串口485通讯第一次发送数据丢失第一个字节
描述如标题
思路:多次测试只在第一次通讯数据出现此种情况,查数据手册发现如下:
在USART_DR寄存器中写入了最后一个数据字后,在关闭USART模块之前或设置微控制器进入低功耗模式(详见下图)之前,必须先等待TC=1。
使用下列软件过程清除TC位:
1.读一次USART_SR寄存器;
2.写一次USART_DR寄存器。
注: TC位也可以通过软件对它写’0’来清除。此清零方式只推荐在多缓冲器通信模式下使用。
解决方案:
1:写一次USART_DR寄存器之前必须先读取一次USART_SR寄存器
if(USART_GetITStatus(USART1,USART_FLAG_TC)!=Bit_SET) //清除TC位
{
USART_SendData(USART1,Temp); //发送数据
while (USART_GetFlagStatus(USART1,USART_FLAG_TC) !=SET); //轮询知道发送完毕(等待TC=1)
}
2:写一次USART_DR寄存器之前必须先通过软件对TC位写’0’清除
USART_ClearFlag(USART1,USART_FLAG_TC); //清除TC位
USART_SendData(USART1,Temp); //发送数据
while (USART_GetFlagStatus(USART1,USART_FLAG_TC) !=SET); //轮询知道发送完毕(等待TC=1)
注意:这里强调每次,必须注意!!!
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
