您的位置:首页 > 其它

串口USART UART 接收结束标志是怎么回事 这是一种自己定义的协议 没有通用协议

2017-09-29 15:38 281 查看
原文链接:http://www.openedv.com/posts/list/53847.htm

f(USART_RX_STA&0x40)

{

if(Res!=0x0a)

{

USART_RX_STA=0;//

}

else

{

USART_RX_STA|=0x80;

}

}

=======================================

关于原子历程里面的这段函数 如果数据包里含有0x01 0x02 0x03 0x0d 0x03 0x05 0x0d 0x0a 这种数据是不是就接收不到我想要的数据了啊 有点疑问


最佳答案

毫无疑问是的,

0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了,

0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行

像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了

串口如何检测数据接收完毕或串口接收超时,这个问题是个老大难问题,没有好的协议支持,就要浪费单片机大量的资源去解决这个问题。

比如浪费一个定时器,每次在中断里接到一个字节就开启定时器去记时,9600大概1MS一个字节,定时器到3MS中断检查有没收到数据了就表示数据帧结束了,

又比如串口绑在DMA通道上,通过串口的空闲中断来判断接收完成

问题在于现在有大量的工业通讯协议如MODBUS等没有帧结束标志,实在令人发指
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐