OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4773|回复: 0

RS 485第一个数据丢失的问题

[复制链接]

10

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
176
金钱
176
注册时间
2016-7-12
在线时间
35 小时
发表于 2017-7-6 13:31:24 | 显示全部楼层 |阅读模式
做485实验的时候,发送数据的程序是从串口实验复制过来的,并没有按照例程来。结果发现,每次硬件复位时发送的数据第一个字节都会丢失,对照例程才知道了问题所在,
QQ截图.png


例程中的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清零的办法如下:
QQ截图1.png
所以如果按照我的写法,虽然先执行了发送第一条语句的指令,但是此时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


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-18 09:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表