你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
意法半导体官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
[复制链接]
徐_公
提问时间:2014-1-17 09:30 /
<span style="font-size: medium; "><span style="font-family: 宋体; ">我用DMA方式从USART口接收数据,转存到缓存中,缓存大小为255,实际接收数据每包
赞
0
收藏
1
评论
11
分享
发布时间:2014-1-17 09:30
举报
请先
登录
后回复
11个回答
fengye5340
回答时间:2014-1-17 09:45:02
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
这个数据包格式你自己能控制吗?也就是你自己定义的吗?如果是,那就容易一些,在包结束最后一个字节增加标示符,随便定义一个字符都行。
根据包结束符,来判定一次DMA接收。
2、如果这个数据包是字符串,根据判定结束字符0x0d,0x0a字符来启动下一次DMA接收。
3、系统给定数据包,一般这样的数据包格式都比较固定。
这样需要判定每次结束符,来启动下一次DMA转换。
思路就是:根据接收到的字符最后一个或两个字节内容来判定结束标记。
赞
0
评论
回复
支持
反对
wkuang
回答时间:2014-1-17 22:41:42
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
楼上说的比较好,
1、就是自定顶一个协议, 启动和停止用一个特定字符串来表示;如5A5A5A5A表示启动,A5A5A5A5表示停止。发送时以启动开头,以停止结尾,接收时可以检查。
2、发送一个字符串,第一个字节表示发送数据段的长度,紧接着是数据的内容; 接收时就可以知道数据接受完了没有。
很多协议都是这么实现的,比较常见的如USB协议的描述符实现
赞
0
评论
回复
支持
反对
有缘于你
回答时间:2014-1-17 22:51:12
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
如果没有特殊的结束字符串很难办的,有的话按1楼方法做就行
赞
0
评论
回复
支持
反对
dzc2001
回答时间:2014-1-18 10:10:27
a0a.1 0b0c
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
上层可以自己封装一下,做一个包头一个结束
赞
0
评论
回复
支持
反对
Hiker天下
回答时间:2014-1-18 18:51:43
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
还是不建议LZ使用DMA接收, 接收最好使用中断方式, 这样易控制些。
赞
0
评论
回复
支持
反对
Hiker天下
回答时间:2014-1-18 18:52:02
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
还是不建议LZ使用DMA接收, 接收最好使用中断方式, 这样易控制些。
赞
0
评论
回复
支持
反对
xiaodc88
回答时间:2014-1-18 20:00:45
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
赞
0
评论
回复
支持
反对
fengye5340
回答时间:2014-1-18 21:12:20
a0a.1 0b0c
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
回复第 8 楼 于2014-01-18 20:00:45发表:
其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
你说的是一个完整的串口通信协议格式,原理是一样的,
自定义的串口通信协议一般都是这样:
帧头 +数据大小+ 数据内容+校验码+结束符
这种格式是串口通信最稳定的方法之一。
赞
0
评论
回复
支持
反对
徐_公
回答时间:2014-1-21 11:17:36
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
谢谢各位大侠,我先和上位机协商一下,价格结束符试试。
赞
0
评论
回复
支持
反对
jstele
回答时间:2014-1-22 08:10:34
a0a.1 0b0c
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
不定長又沒有標示符封裝的串行資料非常難以辯視,如果使用REGULER的方式去做,那要寫的CASE的就要看你的上位機發的訊息有多少樣式的資料,不過也不好做的
赞
0
评论
回复
支持
反对
徐_公
回答时间:2014-1-22 08:28:00
a0a.1 0b0c
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
再请教一下,如果我有两种长度的数据,都是以A5结束的,我是通过定时器一直检测接收缓存中的数据还是有其它办法,哪位给细说说呗
赞
0
评论
回复
支持
反对
所属标签
相似问题
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
根据包结束符,来判定一次DMA接收。
2、如果这个数据包是字符串,根据判定结束字符0x0d,0x0a字符来启动下一次DMA接收。
3、系统给定数据包,一般这样的数据包格式都比较固定。
这样需要判定每次结束符,来启动下一次DMA转换。
思路就是:根据接收到的字符最后一个或两个字节内容来判定结束标记。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
1、就是自定顶一个协议, 启动和停止用一个特定字符串来表示;如5A5A5A5A表示启动,A5A5A5A5表示停止。发送时以启动开头,以停止结尾,接收时可以检查。
2、发送一个字符串,第一个字节表示发送数据段的长度,紧接着是数据的内容; 接收时就可以知道数据接受完了没有。
很多协议都是这么实现的,比较常见的如USB协议的描述符实现
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
其实很简单的,发送的包分成两种,比如包A和包B,其中包B是你要发送的数据,包A只是包B的字节数目,而且包A的长度是固定的。每次都首先发送包A告之接收方包B的长度,然后再发送包B,如此一直下去就可以了。这是用DMA发送和接收不定长包的最好方式。其它的方法都太过复杂,操作性不强。
你说的是一个完整的串口通信协议格式,原理是一样的,
自定义的串口通信协议一般都是这样:
帧头 +数据大小+ 数据内容+校验码+结束符
这种格式是串口通信最稳定的方法之一。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
RE:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。
回复:用DMA方式从串行USART口连续接收数据,怎样确认收到一个完整的包。