OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9802|回复: 11

DMA接收多个串口数据问题。

[复制链接]

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-4-28
在线时间
16 小时
发表于 2014-5-5 16:16:00 | 显示全部楼层 |阅读模式
5金钱
1)怎么在原子试验21的代码上修改,能够用DMA接收数据?
2)一个DMA控制器只能同时打开一个DMA通道?如果我想用一个控制器同时接收两个串口的数据,会不会丢失数据?
我的项目需要接收2个大量串口数据,发送一个大量的串口数据,DMA控制器只有两个,怎样做才能不丢失数据?

最佳答案

查看完整内容[请看2#楼]

1,串口数据接收,不建议用DMA,数据发送倒是可以用DMA.DMA接收不定长数据的时候,不太好处理. 2,同时只能有1个通道在工作.所以2个串口,如果是属于同一个DMA控制器,那么就不可能同时工作的. 另外,你说的大量,是多大?波特率多高?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-5 16:16:01 | 显示全部楼层
1,串口数据接收,不建议用DMA,数据发送倒是可以用DMA.DMA接收不定长数据的时候,不太好处理.
2,同时只能有1个通道在工作.所以2个串口,如果是属于同一个DMA控制器,那么就不可能同时工作的.
另外,你说的大量,是多大?波特率多高?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-4-28
在线时间
16 小时
 楼主| 发表于 2014-5-5 17:13:49 | 显示全部楼层
谢谢原子的热心回答。
波特率为计划为921600,要接收2个串口数据,这个是高速激光测试数据,通过串口接收。每秒钟25K个测试数据包。
每个测试包以一个字节结束,此字节高位为1,其他数据高位为0.

测试数据时不停地发送,肯定会满的,如果不用DMA,我怀疑CPU是否会运行得过来。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-5 17:16:56 | 显示全部楼层
回复【3楼】yunhongli:
---------------------------------
这么高波特率,MCU也没法干其他事情了....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-5 17:18:26 | 显示全部楼层
1个字节中断一次,921600的波特率,相当于每秒钟传输90K字节,且不说你的数据作何处理,光接收数据,也就是差不多10us就中断一次,MCU压力山大.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-4-28
在线时间
16 小时
 楼主| 发表于 2014-5-5 17:20:26 | 显示全部楼层
项目说明: 公司项目为高速激光项目,要求激光器每秒钟进行25K次激光测试,每次测试一个数据包。然后发给单片机进行处理,单片机最多接收两个激光机的数据,因为STM32只有两个DMA控制器,所以设计的时候不敢接超过2个激光器,担心DMA切换是否会丢数据。
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-4-28
在线时间
16 小时
 楼主| 发表于 2014-5-5 17:22:31 | 显示全部楼层
用DMA就会好很多,收几个测试数据包以后处理,CPU压力会小很多。
中间偶尔丢几个数据包,问题也不是大,只有丢失的比例不要太高就好了。
回复

使用道具 举报

9

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-4-1
在线时间
0 小时
发表于 2014-5-5 17:25:00 | 显示全部楼层
哪最后功能实现了没?
回复

使用道具 举报

15

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
167
金钱
167
注册时间
2014-4-28
在线时间
16 小时
 楼主| 发表于 2014-5-5 17:28:04 | 显示全部楼层
项目正在做,前期评估中,现在就是想用DMA接收串口数据。
@原子哥,DMA接收数据的例子没有?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-6 00:24:50 | 显示全部楼层
回复【9楼】yunhongli:
---------------------------------
论坛有一个,你搜索下。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2014-5-17
在线时间
0 小时
发表于 2016-2-27 11:37:22 来自手机 | 显示全部楼层
DMA串口数据接收
回复

使用道具 举报

4

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
75
金钱
75
注册时间
2013-7-8
在线时间
5 小时
发表于 2016-2-27 11:44:47 | 显示全部楼层
yunhongli 发表于 2014-5-5 17:28
项目正在做,前期评估中,现在就是想用DMA接收串口数据。
@原子哥,DMA接收数据的例子没有?

我有做过3个串口同时工作的项目,接收是1个用中断,另外两个各用一个DMA。发送用查询方式直接写给寄存器。
DMA接收配合定时器中断定时查询接收的数据并提取。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 04:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表