OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

楼主: 1201yuge

STM32使用串口1配合DMA接收不定长数据,大大减轻CPU载荷。

  [复制链接]

  离线 

16

主题

105

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2011
金钱
2011
注册时间
2015-4-18
在线时间
215 小时
发表于 2016-6-17 07:08:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

  离线 

29

主题

1142

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1902
金钱
1902
注册时间
2016-2-16
在线时间
509 小时
发表于 2016-6-17 10:56:58 | 显示全部楼层
不错不错,我前几天就想过这个问题,不过由于是低波特率,才9600,感觉不会占用CPU,就直接用别人的队列来接收了。楼主这个方法好不错,又学到了东西,好开心
回复 支持 反对

使用道具 举报

  离线 

23

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
409
金钱
409
注册时间
2015-4-24
在线时间
51 小时
发表于 2016-6-17 12:27:26 | 显示全部楼层
多谢楼主分享,学习一下
回复 支持 反对

使用道具 举报

  离线 

0

主题

180

帖子

0

精华

高级会员

Rank: 4

积分
622
金钱
622
注册时间
2016-1-27
在线时间
173 小时
发表于 2016-6-17 12:35:46 | 显示全部楼层
谢谢分享,顶一个!
回复 支持 反对

使用道具 举报

  离线 

11

主题

64

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
397
金钱
397
注册时间
2016-6-12
在线时间
86 小时
发表于 2016-6-17 13:44:26 | 显示全部楼层
正点原子公众号
感谢~~
回复 支持 反对

使用道具 举报

  离线 

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-6-7
在线时间
4 小时
发表于 2016-6-27 09:19:55 | 显示全部楼层
大神,能不能指点下多串口同时工作,发给指定一个串口,通过这个串口用WiFi发出,这个怎么写呢?
回复 支持 反对

使用道具 举报

  离线 

18

主题

453

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1430
金钱
1430
注册时间
2014-2-25
在线时间
169 小时
 楼主| 发表于 2016-7-1 10:54:37 | 显示全部楼层
xjstudystm 发表于 2016-6-27 09:19
大神,能不能指点下多串口同时工作,发给指定一个串口,通过这个串口用WiFi发出,这个怎么写呢?

你是说串口一对多通信吗,不太明白你的意思。
回复 支持 反对

使用道具 举报

  离线 

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
54
金钱
54
注册时间
2016-6-7
在线时间
4 小时
发表于 2016-7-1 11:47:24 | 显示全部楼层
恩恩,是的。
回复 支持 反对

使用道具 举报

  离线 

18

主题

239

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1817
金钱
1817
注册时间
2014-8-5
在线时间
210 小时
发表于 2016-7-1 12:58:19 | 显示全部楼层
谢谢楼主,学习了。
回复 支持 反对

使用道具 举报

  离线 

18

主题

453

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1430
金钱
1430
注册时间
2014-2-25
在线时间
169 小时
 楼主| 发表于 2016-7-1 13:27:04 | 显示全部楼层

串口一般只能支持一对一通信的,并联起来通信应该会相互影响
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2016-1-21
在线时间
26 小时
发表于 2016-7-5 11:56:00 | 显示全部楼层
       USART_ClearITPendingBit(USART1, USART_IT_IDLE);         //清除中断标志
请问是否需要?
回复 支持 反对

使用道具 举报

  离线 

7

主题

361

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2284
金钱
2284
注册时间
2016-5-13
在线时间
126 小时
发表于 2016-7-12 13:41:09 | 显示全部楼层
好强大啊,必须顶,顶顶顶顶顶。
回复 支持 反对

使用道具 举报

  离线 

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2016-7-12
在线时间
17 小时
发表于 2016-7-13 10:00:37 | 显示全部楼层
谢谢楼主分享。能不能把接收和发送都用DMA方式的程序发给我一份啊???邮箱986660601@qq.com
回复 支持 反对

使用道具 举报

  离线 

0

主题

3

帖子

0

精华

新手入门

积分
8
金钱
8
注册时间
2016-1-11
在线时间
2 小时
发表于 2016-7-28 11:25:14 | 显示全部楼层
必须赞一个
回复 支持 反对

使用道具 举报

  离线 

50

主题

1453

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2381
金钱
2381
注册时间
2011-1-25
在线时间
114 小时
发表于 2016-7-28 11:32:53 | 显示全部楼层
挺不错!
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
23
金钱
23
注册时间
2015-3-5
在线时间
0 小时
发表于 2016-7-28 17:50:25 | 显示全部楼层
缺点就是单字节就会进入空闲中断,能设置超时时间就好了,当然也可以在软件上做处理。
回复 支持 反对

使用道具 举报

  离线 

3

主题

173

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1445
金钱
1445
注册时间
2016-1-28
在线时间
240 小时
发表于 2016-7-31 08:56:57 | 显示全部楼层
宠辱不惊看庭前花开花落去留无意望天上云卷云舒。
回复 支持 反对

使用道具 举报

  离线 

9

主题

150

帖子

0

精华

高级会员

Rank: 4

积分
823
金钱
823
注册时间
2014-11-9
在线时间
155 小时
发表于 2016-8-2 11:27:48 | 显示全部楼层
我一直用空闲接收,想着什么时候,加入DMA,今天就看到了你的帖子,给力啊,改天移植试试。
回复 支持 反对

使用道具 举报

  离线 

13

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
398
金钱
398
注册时间
2016-6-23
在线时间
72 小时
发表于 2016-8-25 10:58:50 | 显示全部楼层
USART_ReceiveData(USART1);//函数读取串口外设最近接收到的数据,但是返回的数据并没有0保存。作用是:通过对 USART_DR 寄存器执行读入 操作将该位清零,从而实现DMA连续通信。C:\Users\Administrator\Desktop
VV$N_RD0@LY014~Z~]CI5WK.png
回复 支持 反对

使用道具 举报

  离线 

4

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-8-24
在线时间
13 小时
发表于 2016-9-5 23:48:47 | 显示全部楼层
F407板子 DMA接收串口数据问题
http://www.openedv.com/forum.php ... 3&fromuid=63071
(出处: OpenEdv-开源电子网)

实验出问题了,大家帮忙看看
回复 支持 反对

使用道具 举报

  离线 

0

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2012-9-17
在线时间
14 小时
发表于 2016-9-26 14:04:06 | 显示全部楼层
空闲接收,真是想不到
回复 支持 反对

使用道具 举报

  离线 

12

主题

330

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
1183
金钱
1183
注册时间
2013-1-11
在线时间
236 小时
发表于 2016-9-28 22:06:55 | 显示全部楼层
学习了
知识是你最好的财富
回复 支持 反对

使用道具 举报

  离线 

0

主题

7

帖子

0

精华

新手入门

积分
52
金钱
52
注册时间
2016-9-25
在线时间
7 小时
发表于 2016-9-28 22:48:22 | 显示全部楼层
学习了。
回复 支持 反对

使用道具 举报

  离线 

5

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
982
金钱
982
注册时间
2015-12-28
在线时间
110 小时
发表于 2016-10-21 08:55:19 | 显示全部楼层

***********             **                       **********                           *************  
*                            **                        *           *                                              *
*                            **                        *           *                                              *
***********             **                       *            *                            ************
*                            **                        *            *                                             *
*                            **                        *            *                                             *
*                            **                        **********                           *************
越努力,越优秀;越独立,越自由
回复 支持 反对

使用道具 举报

  离线 

5

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
982
金钱
982
注册时间
2015-12-28
在线时间
110 小时
发表于 2016-10-21 08:55:44 | 显示全部楼层

***********             **                       **********                           *************  
*                            **                        *           *                                              *
*                            **                        *           *                                              *
***********             **                       *            *                            ************
*                            **                        *            *                                             *
*                            **                        *            *                                             *
*                            **                        **********                           *************
越努力,越优秀;越独立,越自由
回复 支持 反对

使用道具 举报

  离线 

4

主题

282

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2016-2-21
在线时间
297 小时
发表于 2016-10-21 09:24:48 | 显示全部楼层
好东西,mark一下
回复 支持 反对

使用道具 举报

  离线 

2

主题

33

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2014-8-7
在线时间
32 小时
发表于 2016-10-24 08:49:41 | 显示全部楼层
if(USART_GetITStatus(USART1, USART_IT_IDLE) != RESET)  //接收中断(接收到的数据必须是0x0d 0x0a结尾)

这个是自己协议定义的还是这种空闲中断要求的??
回复 支持 反对

使用道具 举报

  离线 

11

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
150
金钱
150
注册时间
2016-9-7
在线时间
41 小时
发表于 2016-11-8 10:47:50 | 显示全部楼层
调试的时候没有问题接受正确,全速运行会丢掉前几个字节,如果中断加上300MS延时也能正常接受,这是什么情况??
回复 支持 反对

使用道具 举报

  离线 

13

主题

380

帖子

0

精华

高级会员

Rank: 4

积分
673
金钱
673
注册时间
2015-3-26
在线时间
121 小时
发表于 2016-11-30 14:10:07 | 显示全部楼层
还是dma串口比较有用
回复 支持 反对

使用道具 举报

  离线 

11

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2016-4-4
在线时间
36 小时
发表于 2016-12-1 15:23:14 | 显示全部楼层
谢谢分享 在此基础上我有把发送DMA加上了 应该说cpu又大大减负了
QQ截图20161201152152.png

串口通信 DMA接收不定长数据 DMA发送.rar

275.12 KB, 下载次数: 187

回复 支持 反对

使用道具 举报

  离线 

11

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2016-4-4
在线时间
36 小时
发表于 2016-12-1 15:25:48 | 显示全部楼层
兴声依旧 发表于 2016-7-13 10:00
谢谢楼主分享。能不能把接收和发送都用DMA方式的程序发给我一份啊???邮箱

见80F~~~~
回复 支持 反对

使用道具 举报

  离线 

13

主题

162

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2017-3-31
在线时间
99 小时
发表于 2017-4-1 12:05:36 | 显示全部楼层
xjstudystm 发表于 2016-6-27 09:19
大神,能不能指点下多串口同时工作,发给指定一个串口,通过这个串口用WiFi发出,这个怎么写呢?

多个串口开多个DMA通道,在总线空闲中断里把值存到一个同数组里,然后用指定串口发数组
回复 支持 反对

使用道具 举报

  离线 

0

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2014-8-17
在线时间
17 小时
发表于 2017-4-2 10:26:15 | 显示全部楼层
MARK,谢谢分享
回复 支持 反对

使用道具 举报

  离线 

1

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
50
金钱
50
注册时间
2016-12-14
在线时间
10 小时
发表于 2017-4-2 12:06:00 | 显示全部楼层
nice cool
回复 支持 反对

使用道具 举报

  离线 

6

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
362
金钱
362
注册时间
2016-8-25
在线时间
59 小时
发表于 2017-4-6 16:45:36 | 显示全部楼层
Mark 楼主厉害
回复 支持 反对

使用道具 举报

Deadline 该用户已被删除
发表于 2017-4-10 22:42:54 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

Deadline 该用户已被删除
发表于 2017-4-10 22:43:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
2
金钱
2
注册时间
2017-7-6
在线时间
0 小时
发表于 2017-7-6 17:37:33 | 显示全部楼层
//接收中断(接收到的数据必须是0x0d 0x0a结尾),这样不就收限制了吗
回复 支持 反对

使用道具 举报

  离线 

29

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2368
金钱
2368
注册时间
2014-7-19
在线时间
342 小时
发表于 2017-7-6 20:36:13 | 显示全部楼层
mark!学习了!
电子人生!
回复 支持 反对

使用道具 举报

  离线 

0

主题

6

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2016-10-19
在线时间
80 小时
发表于 2017-7-7 10:43:55 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

  离线 

3

主题

11

帖子

0

精华

新手入门

积分
40
金钱
40
注册时间
2015-6-2
在线时间
14 小时
发表于 2017-7-11 20:46:19 | 显示全部楼层
楼主,有个问题想请教。我现在需要1s中接收40KB的数据,按照你的方法,调试助手每隔20ms发送1KB的数据,测试下来,发现会有比较严重的丢数现象。感觉像是串口DMA的数没来得及响应,导致新进来的数据被冲掉了。有没有什么方法
回复 支持 反对

使用道具 举报

  离线 

11

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2017-6-12
在线时间
68 小时
发表于 2017-7-14 14:31:02 | 显示全部楼层
楼主,你好,我要使用串口+DMA中断接收上位机发送的图片信息数据(共300K字节),然后存储到外部flash中,数据特大,怎么处理啊?
回复 支持 反对

使用道具 举报

  离线 

11

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2017-6-12
在线时间
68 小时
发表于 2017-7-14 14:32:08 | 显示全部楼层
kobemrc 发表于 2017-7-11 20:46
楼主,有个问题想请教。我现在需要1s中接收40KB的数据,按照你的方法,调试助手每隔20ms发送1KB的数据,测 ...

你好,你的数据信息量也大吗?请问是如何处理的?
回复 支持 反对

使用道具 举报

  离线 

51

主题

477

帖子

0

精华

高级会员

Rank: 4

积分
843
金钱
843
注册时间
2014-11-18
在线时间
143 小时
发表于 2017-9-4 15:59:06 | 显示全部楼层
给楼主,顶一个,多谢了。非常有用哦。
自己选择的路,成家前走完。
回复 支持 反对

使用道具 举报

  离线 

11

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
340
金钱
340
注册时间
2017-6-12
在线时间
68 小时
发表于 2017-9-28 15:30:40 | 显示全部楼层
楼主,你好,请教个问题,我由于数据量比较大,目前采用串口空闲中断+DMA传输完成中断+双缓冲的方法处理数据,串口波特率为57600。双缓冲每个都定义为4096字节,应该是前面接收的数据(满4096字节)都会进入DMA传输完成中断,在传输完成中断中切换双缓冲,而最后的不满足4096字节的时候才进入串口空闲中断,标识数据已经传输完成了。

但是,我目前调试debug下来,发现程序经常会进入串口空闲中断,而偶尔才会进入DMA传输完成中断,是什么原因会引起这样的问题啊?这个问题困扰我几天了,急求帮忙!!!
回复 支持 反对

使用道具 举报

  离线 

12

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
125
金钱
125
注册时间
2012-1-13
在线时间
27 小时
发表于 2017-9-28 15:33:11 | 显示全部楼层
简单应用可以,多任务、多外设就力不从心了。
回复 支持 反对

使用道具 举报

  离线 

0

主题

5

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2017-9-29
在线时间
2 小时
发表于 2017-9-29 16:02:46 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

  离线 

16

主题

341

帖子

0

精华

高级会员

Rank: 4

积分
736
金钱
736
注册时间
2017-5-21
在线时间
327 小时
发表于 2017-9-29 21:08:48 来自手机 | 显示全部楼层
hpdell 发表于 2016-3-26 19:10
你好,请问 这个有没有 使用 最新的库,cube / hal 的库制作的 ??

我做了HAL库的,不过现在在家,没法发给你,回去给发个帖子
回复 支持 反对

使用道具 举报

  离线 

12

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
106
金钱
106
注册时间
2016-9-13
在线时间
22 小时
发表于 2017-12-27 15:58:50 | 显示全部楼层
请问,既然要接收200个数据,才会产生中断,那么为啥要DMA_GetCurrDataCounter();函数计算出本次的数据接受长度呢?
回复 支持 反对

使用道具 举报

  离线 

1

主题

14

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2017-10-1
在线时间
23 小时
发表于 2018-1-6 10:27:52 | 显示全部楼层
真棒
回复 支持 反对

使用道具 举报

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

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-5-26 00:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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