你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
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口连续接收数据,怎样确认收到一个完整的包。