0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32的ADC1采集多条通道 可以不使用DMA功能吗?

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-14 14:46 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

类似的问题

为什么我采集5条通道的电压,而采集到的值却都是第一条的呢?

我什么时候需要使用DMA功能?

关于ADC的一些知识

STM32ADC是一种12位逐次逼近型的模拟数字转换器。它有多达18条通道,可测量16个外部和2个内部信号源。

各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器ADC_DR中。

其实就是说,一个ADC,可检测18条通道,我们外接的只有16条。而结果只保存在一个寄存器ADC_DR中。

要使用ADC1采集多条通道,那么就需要对采集的通道进行分组排序。STM32的ADC可以把转换组织成两组:规则组和注入组。

假如我们采集的通道按照如下顺序完成转换:通道3、通道8、通道2,则需要软件对其配置:

ADC_RegularChannelConfig(ADC1,ADC_Channel_3,1, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_8,2, ADC_SampleTime_55Cycles5);

ADC_RegularChannelConfig(ADC1,ADC_Channel_2,3, ADC_SampleTime_55Cycles5);

使用DMA方式

从上面的描述中知道,ADC转换的结果只能保存在ADC_DR中。因为规则通道转换的值储存在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。

只有在规则通道的转换结束时才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址。

也就是说,如不使用DMA,我们采用规则转换,中间有些存储在ADC_DR寄存器中的数据可能被(下一条通道采集的数据)覆盖掉。这就是有人说的“采集到的数据不对应其通道的值”的原因。

同理,需要这种规则转换多条通道,就需要使用DMA功能才能完成。

不使用DMA方式

看了上面使用DMA的情况,相信都应该明白:如果使用规则转换,就最好使用DMA功能。

不使用DMA方式,就需要使用非常奇葩的处理方式:单通道单次转换方式,需要切换通道,不然就会像上面说的,采集不到对应通道的数据。

STM32的ADC功能非常强大,感兴趣的朋友可深入理解一下。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374667
  • dma
    dma
    +关注

    关注

    3

    文章

    582

    浏览量

    106277
  • ADC1
    +关注

    关注

    0

    文章

    3

    浏览量

    8560
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    是否有使用 RTD4.0.0 MCAL 用于 S32DS3.5 的多通道 ADC MCL DMA不使用 BCTU)的演示?

    是否有使用 RTD4.0.0 MCAL 用于 S32DS3.5 的多通道 ADC MCL DMA不使用 BCTU)的演示?
    发表于 04-01 07:08

    ADC转换-DMA传输

    #define DMA_CYCLE_EN1 uint32_t ADC_Result_Array[16] = {0
    发表于 01-27 07:27

    自己DIY的STM32F103C8T6最小系统板+ADC使用的是F103的ADC1

    参数具体配置:设为独立模式,单通道采集无需扫描,启动连续转换,采用内部软件触发,数据右对齐,转换通道1,调用 ADC_Init 函数完成
    发表于 12-06 13:14

    CW32的ADC视线,DMA扩展采样思路

    如果需要对超过 4 路的模拟量进行采样,则需要结合 DMA功能,以实现较少的 CPU 参与。其思路如下: 1.ADC 配置为单通道单次转换,完成转换后硬件触发
    发表于 11-13 08:09

    STM32G030K6Tx使用ADC+DMA进行6通道ADC采集DMA传输错位怎么解决?

    ;GPIO_InitStruct); /[i] ADC1 DMA Init //[i] USER CODE BEGIN ADC1_DMA_Init 1
    发表于 09-09 06:30

    STM32F405RGT6 ADC2+TIM4触发+DMA(DMA2_Stream2_CH1)+DMA中断会死机,怎么解决?

    ADC1+TIM4触发+DMA(DMA2_Stream0_CH0)+DMA中断完全正常更改为ADC2+TIM4触发+
    发表于 08-04 07:16

    无法配置 ADC1 来触发 DMA 传输,怎么解决?

    启动。 您能帮我设置 DMA 通道的触发源吗? 此外,我在 ADC1 章节中读到以下声明: [i]比较通道有 8 个事件(CMPUPx 和 CMPLOx),
    发表于 07-21 06:57

    【微五科技CF5010RBT60开发板试用体验】+A/D数据采集

    从资料可以看出,CF5010RBT60能通过10个A/D检测通道,见图1所示。 图1 检测通道与引脚关系 要实现多
    发表于 07-19 12:48

    基于APM32F411 DMA_ADC Handler模式分析及解决

    最近在编写DMA_ADC例程的过程中出现了一个中断配置的问题,在ADC采集过程中,结合手册进行ADC连续转换模式配置采集,手册上给出需要进行
    的头像 发表于 06-24 14:30 1220次阅读
    基于APM32F411 <b class='flag-5'>DMA_ADC</b> Handler模式分析及解决

    STM32通道FFT运算异常的原因?怎么解决?

    使用) 一、问题描述 当前项目中,ADC采样率为 960kHz,共 16个通道。采样数据通过DMA搬运至内存,随后对每个通道数据进行FFT频谱分析。 实际测试中,只处理
    发表于 06-19 06:27

    STM32F407 ADC Dual regular simultaneous only 模式下最高采样率仅 96 kHz,960 kHz无法工作怎么解决?

    一、平台及配置 MCU 型号 :STM32F407VG (Cortex‑M4) ADCADC1 + ADC2,Dual regular simultaneous only 模式
    发表于 06-16 07:09

    请问STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?

    请问下大家,STM32G431 芯片UVW三相的电流检测,配置使用内部运放PGA,看到G431-ESCdemo板对应motor workbench配置,为什么UV相的运放输出分别是ADC1 3通道
    发表于 06-10 07:39

    请问STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?

    请问下大家,STM32G431 芯片UVW三相的电流检测,配置使用内部运放PGA,看到G431-ESCdemo板对应motor workbench配置,为什么UV相的运放输出分别是ADC1 3通道
    发表于 06-06 07:47

    请问STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?

    请问下大家,STM32G431 芯片UVW三相的电流检测,配置使用内部运放PGA,看到G431-ESCdemo板对应motor workbench配置,为什么UV相的运放输出分别是ADC1 3通道
    发表于 05-14 08:12

    请问STM32G431内部运放1和2输出连接的ADC为什么不是OPAMP?

    请问下大家,STM32G431 芯片UVW三相的电流检测,配置使用内部运放PGA,看到G431-ESCdemo板对应motor workbench配置,为什么UV相的运放输出分别是ADC1 3通道
    发表于 04-27 07:08