打印
[STM32F1]

STM32F1 ADC和DMA的简单理解

[复制链接]
1117|39
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vivilyly|  楼主 | 2023-3-31 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, DM, DMA, ST


        如上图最后两行可知,校准前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位的讲解,一下就了然了。

、来自https://blog.csdn.net/qq_53652152/article/details/119219284


使用特权

评论回复
沙发
sdlls| | 2023-4-2 16:41 | 只看该作者
在单片机中,ADC和DMA通常会同时使用。

使用特权

评论回复
板凳
pixhw| | 2023-4-2 17:11 | 只看该作者
DMA可以监视ADC的转换结果,一旦转换完成,就会立即将结果写入指定的内存位置,从而实现高速采集。

使用特权

评论回复
地板
juliestephen| | 2023-4-2 20:18 | 只看该作者
ADC和DMA的配置和使用也需要谨慎,以免出现数据错误或系统崩溃等问题。

使用特权

评论回复
5
wengh2016| | 2023-4-2 20:30 | 只看该作者
DMA是一种独立的外设,它可以在内存之间自动进行数据传输,不需要处理器的参与,大大降低了处理器的负担。

使用特权

评论回复
6
houjiakai| | 2023-4-2 21:05 | 只看该作者
ADC用于采集模拟信号,将其转换成数字信号后存储到内存中;DMA则可以直接将这些数字信号从ADC的数据寄存器中复制到指定的内存地址中,而无需处理器的干预。

使用特权

评论回复
7
mollylawrence| | 2023-4-2 21:19 | 只看该作者
ADC和DMA看看手册上怎么应用的吧。

使用特权

评论回复
8
51xlf| | 2023-4-2 21:32 | 只看该作者
STM32F1的ADC和DMA的结合可以实现无操作员的持续采样和数据传输,可以大幅提升采集效率。

使用特权

评论回复
9
uytyu| | 2023-4-2 22:00 | 只看该作者
通常情况下,数据传输需要经过处理器,这样就会占用处理器的时间和资源。而使用DMA,则可以实现数据传输与处理器操作并行,从而提高系统的效率。

使用特权

评论回复
10
alvpeg| | 2023-4-2 22:13 | 只看该作者
使用ADC和DMA的好处在于可以大大降低处理器的负担,从而提高系统的效率和稳定性。

使用特权

评论回复
11
belindagraham| | 2023-4-2 22:23 | 只看该作者
在使用ADC和DMA时,一般的流程如下:

配置ADC模块:包括选择采样通道、采样速度、精度等参数。

配置DMA模块:设置数据源和目的地,以及数据传输的方向、数据宽度等参数。

启动ADC转换:开始采样并转换模拟信号。

DMA传输数据:当ADC转换完成后,DMA会将数据从ADC的数据缓冲区中读取,然后传输到指定的内存地址中。

数据处理:CPU可以从内存中读取数据,并进行相应的处理操作。

使用特权

评论回复
12
mmbs| | 2023-4-2 22:29 | 只看该作者
ADC和DMA是单片机中常见的两种重要模块。

使用特权

评论回复
13
SantaBunny| | 2023-4-3 20:46 | 只看该作者
单片机中,ADC和DMA一般会同时使用

使用特权

评论回复
14
中国龙芯CDX| | 2023-4-4 16:40 | 只看该作者
DMA初始化在前,ADC初始化在后

使用特权

评论回复
15
Stahan| | 2023-4-4 23:03 | 只看该作者
为什么图片加载不出来啊

使用特权

评论回复
16
tian111| | 2023-7-6 20:26 | 只看该作者
在单片机中,ADC和DMA通常会同时使用。

使用特权

评论回复
17
songqian17| | 2023-7-6 20:28 | 只看该作者
DMA可以监视ADC的转换结果,一旦转换完成,就会立即将结果写入指定的内存位置,从而实现高速采集。

使用特权

评论回复
18
chenho| | 2023-7-6 20:30 | 只看该作者
ADC和DMA的配置和使用也需要谨慎,以免出现数据错误或系统崩溃等问题。

使用特权

评论回复
19
houcs| | 2023-7-6 20:31 | 只看该作者
DMA是一种独立的外设,它可以在内存之间自动进行数据传输,不需要处理器的参与,大大降低了处理器的负担。

使用特权

评论回复
20
houcs| | 2023-7-6 20:32 | 只看该作者
ADC用于采集模拟信号,将其转换成数字信号后存储到内存中;DMA则可以直接将这些数字信号从ADC的数据寄存器中复制到指定的内存地址中,而无需处理器的干预。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

86

主题

1697

帖子

1

粉丝