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

用串口DMA传输不定长度包的方式!

[复制链接]
xiaodc88 提问时间:2014-1-18 20:06 /
经常看到有人在问用DMA接收不定长包的问题,由于STM32DMA的特殊性,使其对接收不定长的数据不太方便,很多人都在为此伤脑筋,也有不少牛人想了不少的办法,例如用协议或开定时器判别等,其实这些方法都过于复杂。下面是我用的方法:
 
其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之 接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
收藏 评论6 发布时间:2014-1-18 20:06

举报

6个回答
dzc2001 回答时间:2014-1-20 10:35:31

回复:用串口DMA传输不定长度包的方式!

 你这样必须先接受一个包A然后一个包B么?这两个包怎么区分,万一中间错了,还要。。。。。东西都是越整越复杂,最后就是一套协议了
有缘于你 回答时间:2014-1-20 17:36:39

RE:用串口DMA传输不定长度包的方式!

如果包A出错,后面将可能全错了
wkuang 回答时间:2014-1-20 23:03:49

RE:用串口DMA传输不定长度包的方式!

如果想实现可靠传输, 可以这么做,
数据包 = 包头 + 包内容 + 包内容CRC,
包头 = 包标志 + 包内容长度
有CRC校验这样可以保证包头和包内容都是准备的,包头里记录包的长度,从而可以知道准确定位到包的真实内容
scream2008 回答时间:2014-1-21 09:45:54

RE:用串口DMA传输不定长度包的方式!

我不认为这是一种很好的方式,像我们一般采用的后台通讯协议都是MODBUS,这样的话怎样书写包A和包B。
个人认为还是设定计时器较方便,较准确些。
bruce_helen 回答时间:2014-3-2 07:05:09

回复:用串口DMA传输不定长度包的方式!

 这个太欠缺考虑了,想象力太差
你这样自己搞搞还行,假如MCU外接一模块,人家已经定义好协议,直接发送不定长的数据过来,你这个怎么处理?
 
wj7758521 回答时间:2018-6-14 11:53:14
这个问题,这么难解决?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版