OpenEdv-开源电子网

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

串口接收数据时包含0x0d 再以0x0d 0x0a结尾

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2014-7-4
在线时间
0 小时
发表于 2015-6-11 08:59:41 | 显示全部楼层 |阅读模式
5金钱
 if(USART_RX_STA&0x40)
                {
                    if(Res!=0x0a)
                    {
                        USART_RX_STA=0;//
                    }
                    else 
                    {
                        USART_RX_STA|=0x80;
                    }
                }
=======================================
关于原子历程里面的这段函数  如果数据包里含有0x01 0x02 0x03  0x0d 0x03 0x05 0x0d 0x0a 这种数据是不是就接收不到我想要的数据了啊  有点疑问

最佳答案

查看完整内容[请看2#楼]

毫无疑问是的, 0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了, 0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行 像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了 串口如何检测数据接收完毕或串口接收超时,这个问题是个老大难问题,没有好的协议支持,就要浪费单片机大量的资源去解决这个问题。 比如浪费一个定 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

216

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1124
金钱
1124
注册时间
2015-2-27
在线时间
485 小时
发表于 2015-6-11 08:59:42 | 显示全部楼层
毫无疑问是的,
0D 0A这是自行定义的一种数据帧结束标志,不定义这个不没法判断你这一帧数据什么时候结束了,
0D 0A是什么东西咧,它就是我们的回车键的ASCII码, 0D回车,0A换行
像在windows超级终端里一条数据输入完按回车正好来了个0D 0A,表示数据发完了

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

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

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

问题在于现在有大量的工业通讯协议如MODBUS等没有帧结束标志,实在令人发指
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12064
金钱
12064
注册时间
2013-3-8
在线时间
1283 小时
发表于 2015-6-11 14:27:34 | 显示全部楼层
自己写一个好一点的协议就行了。不一定要用原子的例子。
当然,在上面改应该也不算难。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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