OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
楼主: 1201yuge

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

  [复制链接]

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3976
金钱
3976
注册时间
2015-4-18
在线时间
402 小时
发表于 2016-6-17 07:08:33 | 显示全部楼层
正点原子逻辑分析仪DL16劲爆上市
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

24

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

183

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

12

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
424
金钱
424
注册时间
2016-6-12
在线时间
93 小时
发表于 2016-6-17 13:44:26 | 显示全部楼层
感谢~~
回复 支持 反对

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

积分
1679
金钱
1679
注册时间
2014-2-25
在线时间
229 小时
 楼主| 发表于 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

主题

238

帖子

3

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

20

主题

468

帖子

3

精华

金牌会员

Rank: 6Rank: 6

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

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

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

8

主题

533

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

1

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2016-7-12
在线时间
21 小时
发表于 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 | 显示全部楼层
必须赞一个
回复 支持 反对

使用道具 举报

51

主题

1455

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

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

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

3

主题

177

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

11

主题

200

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

13

主题

75

帖子

0

精华

高级会员

Rank: 4

积分
659
金钱
659
注册时间
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: 3Rank: 3

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

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

使用道具 举报

0

主题

37

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

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

使用道具 举报

0

主题

7

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

5

主题

150

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

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

使用道具 举报

5

主题

150

帖子

0

精华

金牌会员

Rank: 6Rank: 6

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

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

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

5

主题

53

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

15

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

275.12 KB, 下载次数: 369

回复 支持 反对

使用道具 举报

16

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

14

主题

171

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

0

主题

21

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

6

主题

17

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
366
金钱
366
注册时间
2016-8-25
在线时间
61 小时
发表于 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

主题

486

帖子

0

精华

论坛元老

Rank: 8Rank: 8

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

使用道具 举报

0

主题

9

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

4

主题

14

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

14

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

14

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

56

主题

520

帖子

0

精华

高级会员

Rank: 4

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

使用道具 举报

14

主题

79

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

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

使用道具 举报

12

主题

29

帖子

0

精华

初级会员

Rank: 2

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

使用道具 举报

0

主题

5

帖子

0

精华

新手上路

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

使用道具 举报

17

主题

354

帖子

0

精华

高级会员

Rank: 4

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

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

使用道具 举报

37

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
278
金钱
278
注册时间
2016-9-13
在线时间
73 小时
发表于 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 | 显示全部楼层
真棒
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 19:49

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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