OpenEdv-开源电子网

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

[战舰F103] 分享:关于ADC和DMA,串口+DMA的结合使用

  [复制链接]

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
发表于 2018-8-7 20:37:37 | 显示全部楼层 |阅读模式
本帖最后由 1208 于 2018-10-26 17:29 编辑

DMA,即直接存储器访问, DMA 传输将数据从一个
地址空间复制到另外一个地址空间。
关于ADC+DMA
外设基地址:ADC1->DR
存储器:DMA内存基地址
数据传输方向,从外设ADC发送到内存读取
循环工作模式

DMA通道采用高优先级
关于串口空闲中断+DMA的运用
开启空闲中断
使能串口DMA接收

以下程序借鉴的是论坛大佬,对于自己学习DMA做个总结



战舰:串口空闲中断+DMA实验.zip

2.89 MB, 下载次数: 7704

战舰:12通道ADC+DMA.zip

3.82 MB, 下载次数: 10265

战舰:六路ADC+DMA传输.zip

3.97 MB, 下载次数: 12422

业精于勤荒于嬉;行成于思毁于随!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-8-10 18:49:21 | 显示全部楼层
本帖最后由 1208 于 2018-8-31 10:47 编辑

谢谢各位的支持!


业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-8-28 12:02:53 | 显示全部楼层
本帖最后由 1208 于 2018-8-29 12:54 编辑
1208 发表于 2018-8-10 18:49
谢谢各位的支持!
把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采 ...

定时器触发ADC模式,DMA传输
一种是TIM2 CH2对应PA1,一种是TIM_CH1对应PA8
定时中断方式触发ADC,DMA传输
都已经做出来了,在我后面的帖子上
感兴趣可以看下
http://www.openedv.com/forum.php ... d=277863&extra=

业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-8-8 01:00:04 | 显示全部楼层
不错,非常难得。cool
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2018-8-8 01:00:30 | 显示全部楼层
欢迎多多分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

17

主题

465

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2142
金钱
2142
注册时间
2013-1-11
在线时间
504 小时
发表于 2018-8-8 08:15:14 | 显示全部楼层
谢谢分享!!!!!!!
知识是你最好的财富
回复 支持 反对

使用道具 举报

1

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2017-10-4
在线时间
13 小时
发表于 2018-8-8 08:57:07 | 显示全部楼层
顶一下
回复 支持 反对

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
35
金钱
35
注册时间
2018-8-8
在线时间
7 小时
发表于 2018-8-8 09:31:34 | 显示全部楼层
正需要这些东西
回复 支持 反对

使用道具 举报

31

主题

2183

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
14287
金钱
14287
注册时间
2018-8-3
在线时间
1147 小时
发表于 2018-8-8 14:33:42 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

15

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2016-11-13
在线时间
22 小时
发表于 2018-8-10 21:49:41 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

31

主题

1951

帖子

3

精华

论坛元老

Rank: 8Rank: 8

积分
4418
金钱
4418
注册时间
2018-5-11
在线时间
923 小时
发表于 2018-8-11 15:12:27 | 显示全部楼层
不错,顶一下,
收藏了,以备不时之需。
我的开源链接 https://github.com/ShuifaHe/STM32.git  请关注,点赞支持哦。
回复 支持 反对

使用道具 举报

4

主题

98

帖子

0

精华

初级会员

Rank: 2

积分
195
金钱
195
注册时间
2018-6-27
在线时间
45 小时
发表于 2018-8-12 09:37:27 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2018-8-11
在线时间
5 小时
发表于 2018-8-12 12:58:24 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

1

主题

80

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2862
金钱
2862
注册时间
2015-3-29
在线时间
284 小时
发表于 2018-8-16 09:05:09 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

20

主题

227

帖子

0

精华

高级会员

Rank: 4

积分
605
金钱
605
注册时间
2017-7-14
在线时间
116 小时
发表于 2018-8-16 11:51:09 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

22

主题

147

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3976
金钱
3976
注册时间
2015-4-18
在线时间
402 小时
发表于 2018-8-16 20:18:36 | 显示全部楼层
非常不错        
回复 支持 反对

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
174
金钱
174
注册时间
2018-2-24
在线时间
44 小时
发表于 2018-8-20 13:28:10 | 显示全部楼层
正需要这个,支持!
回复 支持 反对

使用道具 举报

8

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
130
金钱
130
注册时间
2017-10-13
在线时间
19 小时
发表于 2018-8-23 10:22:44 | 显示全部楼层
1208 发表于 2018-8-10 18:49
谢谢各位的支持!
把ADC设置成连续转换模式,同时对应的DMA通道开启循环模式,这样ADC就一直在进行数据采 ...

楼主,定时读取,数据会乱吗?我现在有这个问题,谢谢!
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-8-25 09:40:34 | 显示全部楼层
本帖最后由 1208 于 2018-10-10 10:16 编辑

你有没用DMA中断来传输数据,不然很容易出现数据丢失现象!我准备发定时器触发ADC和定时中断触发ADC,到时你可以参考下
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
发表于 2018-11-15 16:20:18 | 显示全部楼层
1208 发表于 2018-8-25 09:40
你有没用DMA中断来传输数据,不然很容易出现数据丢失现象!我准备发定时器触发ADC和定时中断触发ADC,到时 ...

好的想法。。
回复 支持 反对

使用道具 举报

17

主题

170

帖子

0

精华

高级会员

Rank: 4

积分
562
金钱
562
注册时间
2018-7-8
在线时间
118 小时
发表于 2018-11-15 16:45:29 | 显示全部楼层
1208 发表于 2018-8-28 12:02
定时器触发ADC模式,DMA传输
一种是TIM2 CH2对应PA1,一种是TIM_CH1对应PA8
定时中断方式触发ADC,DMA ...

超级好的,顶
回复 支持 反对

使用道具 举报

0

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
148
金钱
148
注册时间
2012-9-17
在线时间
24 小时
发表于 2018-12-6 08:57:56 | 显示全部楼层
串口和DMA通信怎么接受不定长数据?
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-12-6 09:42:05 | 显示全部楼层
xiaoliusheng 发表于 2018-12-6 08:57
串口和DMA通信怎么接受不定长数据?

DMA+串口空闲中断
无论接收什么不定长的数据,管你数据有多少,来一个我就收一个
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

0

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
99
金钱
99
注册时间
2018-7-16
在线时间
32 小时
发表于 2018-12-6 10:30:04 | 显示全部楼层
看看学习一下
回复 支持 反对

使用道具 举报

13

主题

633

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1331
金钱
1331
注册时间
2016-8-1
在线时间
229 小时
发表于 2018-12-6 11:07:47 | 显示全部楼层
谢谢分享谢谢分享
Loto虚拟示波器 官方qq群: 706769836 https://shop296209296.taobao.com/shop/view_shop.htm?tracelog=t
回复 支持 反对

使用道具 举报

2

主题

474

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6084
金钱
6084
注册时间
2018-6-27
在线时间
524 小时
发表于 2018-12-19 08:08:35 | 显示全部楼层
谢谢分享,学习学习。
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2018-8-12
在线时间
100 小时
发表于 2018-12-19 11:21:00 | 显示全部楼层
战舰: 定时器中断触发ADC,DMA传输实验中     定时器驱动 中 这个函数TIM_SelectOutputTrigger( TIM2, TIM_TRGOSource_Update ); 是不是可以不用调用了?因为你是在中断里面调用ADC1->CR2|=1<<1;//启动连续转换
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-12-19 12:03:37 | 显示全部楼层
JUSTDY 发表于 2018-12-19 11:21
战舰: 定时器中断触发ADC,DMA传输实验中     定时器驱动 中 这个函数TIM_SelectOutputTrigger( TIM2, TIM ...

需要调用ADC1->CR2,否则数据无法转换
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

23

主题

90

帖子

0

精华

初级会员

Rank: 2

积分
178
金钱
178
注册时间
2018-8-12
在线时间
100 小时
发表于 2018-12-19 16:22:05 | 显示全部楼层
1208 发表于 2018-12-19 12:03
需要调用ADC1->CR2,否则数据无法转换

TIM_SelectOutputTrigger( TIM2, TIM_TRGOSource_Update );   这函数呢
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2018-12-19 17:04:05 | 显示全部楼层
JUSTDY 发表于 2018-12-19 16:22
TIM_SelectOutputTrigger( TIM2, TIM_TRGOSource_Update );   这函数呢

这个屏蔽掉也不影响
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-2-17 11:18:35 | 显示全部楼层
楼主 我想问一下     为什么我的数据会乱0.0
就是说 理论上PA1接的是3.3V 第一次测得是3.3V   第二次就不是3.3V 第三次又是3.3V以此循环 ,请问一下是为什么0.0
回复 支持 反对

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-2-17 11:20:28 | 显示全部楼层
而且我想问一下关于软件触发??小白不是很懂0.0
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-2-18 09:38:06 | 显示全部楼层
游游游 发表于 2019-2-17 11:18
楼主 我想问一下     为什么我的数据会乱0.0
就是说 理论上PA1接的是3.3V 第一次测得是3.3V   第二次就不 ...

你是用了我的源程序还是
数据没有传输成功,可以用定时器
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-2-18 09:43:43 | 显示全部楼层
游游游 发表于 2019-2-17 11:20
而且我想问一下关于软件触发??小白不是很懂0.0

原子例程DMA程序是属于软件触发,有对应的表格对号入座就行
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-3-23 13:59:57 | 显示全部楼层
楼主 我用你的程序 串口助手没有打印啊 这是什么情况???
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-3-23 15:03:01 | 显示全部楼层
游游游 发表于 2019-3-23 13:59
楼主 我用你的程序 串口助手没有打印啊 这是什么情况???

那你看下程序里面有没用到串口打印还是屏幕直接显示
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-3-24 13:53:46 | 显示全部楼层
1208 发表于 2019-3-23 15:03
那你看下程序里面有没用到串口打印还是屏幕直接显示

都没有。。。。好像??
回复 支持 反对

使用道具 举报

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
101
金钱
101
注册时间
2019-2-16
在线时间
26 小时
发表于 2019-3-24 15:17:50 | 显示全部楼层
emmmmmm不能用。
回复 支持 反对

使用道具 举报

109

主题

5562

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10541
金钱
10541
注册时间
2017-2-18
在线时间
1908 小时
发表于 2019-3-24 20:58:45 | 显示全部楼层

怎么接线的?
回复 支持 反对

使用道具 举报

0

主题

22

帖子

0

精华

初级会员

Rank: 2

积分
110
金钱
110
注册时间
2019-2-11
在线时间
15 小时
发表于 2019-3-27 21:32:46 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

1

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
141
金钱
141
注册时间
2019-4-18
在线时间
32 小时
发表于 2019-4-19 18:31:02 | 显示全部楼层
表示并不能实时检测adc数字量
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-4-20 10:10:05 | 显示全部楼层
daisy111 发表于 2019-4-19 18:31
表示并不能实时检测adc数字量

这个你可以自己提高测量时间精度,弄个中断之类的
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

2

主题

37

帖子

0

精华

初级会员

Rank: 2

积分
114
金钱
114
注册时间
2012-2-29
在线时间
14 小时
发表于 2019-8-7 16:15:13 | 显示全部楼层
有STM8的吗?我做的会出错!
回复 支持 反对

使用道具 举报

57

主题

1680

帖子

3

精华

资深版主

Rank: 8Rank: 8

积分
4306
金钱
4306
注册时间
2018-6-30
在线时间
808 小时
 楼主| 发表于 2019-8-8 11:53:53 | 显示全部楼层
terrySTM 发表于 2019-8-7 16:15
有STM8的吗?我做的会出错!

这个没有,自己移植下
业精于勤荒于嬉;行成于思毁于随!
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2019-4-24
在线时间
4 小时
发表于 2019-8-8 19:12:21 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

8

主题

185

帖子

0

精华

新手上路

积分
47
金钱
47
注册时间
2019-7-15
在线时间
47 小时
发表于 2019-8-11 13:20:23 | 显示全部楼层
谢谢分享,学习了
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手上路

积分
38
金钱
38
注册时间
2019-8-30
在线时间
9 小时
发表于 2019-9-17 11:56:38 | 显示全部楼层
感谢分享
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
4
金钱
4
注册时间
2020-1-5
在线时间
0 小时
发表于 2020-1-5 22:42:38 | 显示全部楼层
不错,非常难得。
回复 支持 反对

使用道具 举报

1

主题

20

帖子

0

精华

高级会员

Rank: 4

积分
814
金钱
814
注册时间
2019-10-17
在线时间
59 小时
发表于 2020-1-10 16:55:27 | 显示全部楼层
66666666666666666666666666666666666666
回复 支持 反对

使用道具 举报

1

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
108
金钱
108
注册时间
2020-5-4
在线时间
47 小时
发表于 2020-5-7 15:48:45 | 显示全部楼层
非常感谢楼主的无私奉献!我现在确实非常需要这方面的教程。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-24 20:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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