单片机学习小组
登录
直播中
吴湛
9年用户
883经验值
擅长:电源/新能源
私信
关注
关于stm32f1中的ADC和DMA理解
开启该帖子的消息推送
stm32f1
adc
怎样去校准
STM32
f1中的ADC呢?
怎样去理解stm32f1中的ADC和DMA呢?
回帖
(1)
周睫蒙
2022-2-21 14:58:00
本文主要讲解
stm32f1
中
ADC和DMA
的理解,不讲最基础的配置,需要对ADC和DMA有一定了解。另外在学习中参考了多篇文章,感谢前辈的付出。
在使用ADC过程中,我先是对ADC的
校准
过程产生了疑问
如上图最后两行可知,
校准前
ADC既要
上电
又要
关电
。。。我甚是不解,重看资料才理解
校准应该满足
ADON第一次置1
,且在置1
之前
,
置0时间
超过两个ADC周期,并且在读这段话时,我又重新对ADC的转换启动方式有了新的认识。
在看这个CR2寄存器ADON位之前,我一直以为ADC转换触发方式只有
外部触发转换 和 软件设置CR2第22位SWSTART
。但现在多了连续置ADON位为1这种方式,经过试验发现这种方式确实可行,于是我想在不开启
连续转换模式
下ADON在
两次置1
后会
清0
吗?
如上图所示,打开逻辑分析仪,读取
CR2的ADON位
可知,在ADON置1后不对其进行置0操作则一直保持1,即
第一次
读取完后对ADON置
一下
1,ADC就可以
转换一次,
在了解完ADC的转换开启后,我又开始使用ADC的
DMA请求
上图简单的一段话其暗藏了十分多的内容,我们逐一来看,第一句话直接表明了一个必须使用DMA的场景——在ADC开启
多通道转换
时,想要得到每个通道ADC转换的值,就必须开启对应的
DMA通道
,也就是说,当开启
CR1
的
SCAN位
时,我们所配置的
ADC规则通道组
将会按照我们所安排的顺序去开启转换,然后将值放入
DR
寄存器中,但是,问题就在这里。
如上图所示,ADC的数据位被存放在了
DR
寄存器的前16位,但这只有16位,多通道读取时,
一次扫描
将会有
多个数据
被存放,那当然会
把之前的数据给顶替掉
,所以DMA在这个时候起了大作用
如上图,DMA在得到
ADC某个通道转换结束
的信号时,就会将
DR中的数据
发送给外设寄存器或存储器(如SRAM),所以,我们可以设置一个数组,将多个数据存储下来。
但我那时产生了一个很傻的想法,那就是当
第一个ADC通道转换完
之后,DMA开始传输数据,那么第二个通道的转换是在
DMA传输完成后开始
还是
边传输边转换
如上图所示,红线为SR的规则通道
开始转换
位,绿线为规则通道
转换结束
位,蓝色为DMA_ISR的
传输完成中断位
,由上图分析可知,红线拉高(ADC
开始
转换),绿线拉高(ADC转换
完成
),蓝线拉高(DMA传输
完成
),绿线拉低(ADC转换完成中
断被清0
),可见只有
DMA传输完
,ADC中断才被
清零
(跟下图对应) ,进行下一个通道的转换。
那三句话是什么意思呢?
再读双ADC的快速交叉模式,配合着
DR
寄存器对高16位的讲解,一下就了然了。
第一次写博客,写的都不是啥重点,有错误的地方请各位指出,我看到会及时修改。
本文主要讲解
stm32f1
中
ADC和DMA
的理解,不讲最基础的配置,需要对ADC和DMA有一定了解。另外在学习中参考了多篇文章,感谢前辈的付出。
在使用ADC过程中,我先是对ADC的
校准
过程产生了疑问
如上图最后两行可知,
校准前
ADC既要
上电
又要
关电
。。。我甚是不解,重看资料才理解
校准应该满足
ADON第一次置1
,且在置1
之前
,
置0时间
超过两个ADC周期,并且在读这段话时,我又重新对ADC的转换启动方式有了新的认识。
在看这个CR2寄存器ADON位之前,我一直以为ADC转换触发方式只有
外部触发转换 和 软件设置CR2第22位SWSTART
。但现在多了连续置ADON位为1这种方式,经过试验发现这种方式确实可行,于是我想在不开启
连续转换模式
下ADON在
两次置1
后会
清0
吗?
如上图所示,打开逻辑分析仪,读取
CR2的ADON位
可知,在ADON置1后不对其进行置0操作则一直保持1,即
第一次
读取完后对ADON置
一下
1,ADC就可以
转换一次,
在了解完ADC的转换开启后,我又开始使用ADC的
DMA请求
上图简单的一段话其暗藏了十分多的内容,我们逐一来看,第一句话直接表明了一个必须使用DMA的场景——在ADC开启
多通道转换
时,想要得到每个通道ADC转换的值,就必须开启对应的
DMA通道
,也就是说,当开启
CR1
的
SCAN位
时,我们所配置的
ADC规则通道组
将会按照我们所安排的顺序去开启转换,然后将值放入
DR
寄存器中,但是,问题就在这里。
如上图所示,ADC的数据位被存放在了
DR
寄存器的前16位,但这只有16位,多通道读取时,
一次扫描
将会有
多个数据
被存放,那当然会
把之前的数据给顶替掉
,所以DMA在这个时候起了大作用
如上图,DMA在得到
ADC某个通道转换结束
的信号时,就会将
DR中的数据
发送给外设寄存器或存储器(如SRAM),所以,我们可以设置一个数组,将多个数据存储下来。
但我那时产生了一个很傻的想法,那就是当
第一个ADC通道转换完
之后,DMA开始传输数据,那么第二个通道的转换是在
DMA传输完成后开始
还是
边传输边转换
如上图所示,红线为SR的规则通道
开始转换
位,绿线为规则通道
转换结束
位,蓝色为DMA_ISR的
传输完成中断位
,由上图分析可知,红线拉高(ADC
开始
转换),绿线拉高(ADC转换
完成
),蓝线拉高(DMA传输
完成
),绿线拉低(ADC转换完成中
断被清0
),可见只有
DMA传输完
,ADC中断才被
清零
(跟下图对应) ,进行下一个通道的转换。
那三句话是什么意思呢?
再读双ADC的快速交叉模式,配合着
DR
寄存器对高16位的讲解,一下就了然了。
第一次写博客,写的都不是啥重点,有错误的地方请各位指出,我看到会及时修改。
举报
更多回帖
rotate(-90deg);
回复
相关问答
stm32f1
adc
STM32F
4与
STM32F1
使用串口
DMA
有何区别呢
2021-12-06
1263
stm32f1
串口
DMA
接收定长数据总结,错过绝对后悔
2021-12-07
768
请问有
STM32F1
DMA
传输的I2C通信例程吗?
2019-02-18
3135
STM32F1
控制器容量有哪些分类?
2022-01-20
928
求分享
stm32F1
的usart
1-DMA
-IDLE收发代码
2021-12-13
669
stm32f1
与
stm32f
4的区别究竟是什么
2021-10-20
5138
STM32F1
串口如何使用
DMA
实现数据回传?
2021-12-08
861
STM32F1
固件库的每个库文件都有何作用呢
2021-11-19
1221
怎样去使用
STM32F1
串口的
DMA
控制器呢
2021-12-07
1350
如何对
STM32F
0芯片与
STM32F1
芯片进行配置呢
2021-11-17
1864
发帖
登录/注册
20万+
工程师都在用,
免费
PCB检查工具
无需安装、支持浏览器和手机在线查看、实时共享
查看
点击登录
登录更多精彩功能!
首页
论坛版块
小组
免费开发板试用
ebook
直播
搜索
登录
×
20
完善资料,
赚取积分