你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

[复制链接]
徐_公 提问时间:2014-1-17 09:30 /
<span style="font-size: medium; "><span style="font-family: 宋体; ">我用DMA方式从USART口接收数据,转存到缓存中,缓存大小为255,实际接收数据每包
收藏 1 评论11 发布时间:2014-1-17 09:30

举报

11个回答
fengye5340 回答时间:2014-1-17 09:45:02

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

这个数据包格式你自己能控制吗?也就是你自己定义的吗?如果是,那就容易一些,在包结束最后一个字节增加标示符,随便定义一个字符都行。
根据包结束符,来判定一次DMA接收。
2、如果这个数据包是字符串,根据判定结束字符0x0d,0x0a字符来启动下一次DMA接收。
3、系统给定数据包,一般这样的数据包格式都比较固定。
这样需要判定每次结束符,来启动下一次DMA转换。
思路就是:根据接收到的字符最后一个或两个字节内容来判定结束标记。
wkuang 回答时间:2014-1-17 22:41:42

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

楼上说的比较好,
1、就是自定顶一个协议, 启动和停止用一个特定字符串来表示;如5A5A5A5A表示启动,A5A5A5A5表示停止。发送时以启动开头,以停止结尾,接收时可以检查。
2、发送一个字符串,第一个字节表示发送数据段的长度,紧接着是数据的内容; 接收时就可以知道数据接受完了没有。
很多协议都是这么实现的,比较常见的如USB协议的描述符实现
有缘于你 回答时间:2014-1-17 22:51:12

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

如果没有特殊的结束字符串很难办的,有的话按1楼方法做就行
dzc2001 回答时间:2014-1-18 10:10:27

回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

 上层可以自己封装一下,做一个包头一个结束
Hiker 回答时间:2014-1-18 18:51:43

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

还是不建议LZ使用DMA接收, 接收最好使用中断方式, 这样易控制些。
Hiker 回答时间:2014-1-18 18:52:02

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

还是不建议LZ使用DMA接收, 接收最好使用中断方式, 这样易控制些。
xiaodc88 回答时间:2014-1-18 20:00:45

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
fengye5340 回答时间:2014-1-18 21:12:20

回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

回复第 8 楼 于2014-01-18 20:00:45发表:
其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
 

 你说的是一个完整的串口通信协议格式,原理是一样的,
  自定义的串口通信协议一般都是这样:
    帧头  +数据大小+ 数据内容+校验码+结束符
   这种格式是串口通信最稳定的方法之一。
徐_公 回答时间:2014-1-21 11:17:36

RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。

谢谢各位大侠,我先和上位机协商一下,价格结束符试试。
12下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版