串口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)

注意:这里强调每次,必须注意!!!


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部