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

用串口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外接一模块,人家已经定义好协议,直接发送不定长的数据过来,你这个怎么处理?
 
雷霆跳蚤 回答时间:2018-6-14 11:53:14
这个问题,这么难解决?

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版