STM32 | STM32CubeMX基础之ADC

这篇具有很好参考价值的文章主要介绍了STM32 | STM32CubeMX基础之ADC。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、ADC框图
STM32 | STM32CubeMX基础之ADC
  1. ADC输入电源
STM32 | STM32CubeMX基础之ADC
2. 输入通道

这16个通道对应着不同的IO口,此外 ADC1 的通道 16 连接到了芯片内部的温度传感器,通道 17连接到了VRefInt(内部参照电压)。

STM32 | STM32CubeMX基础之ADC
3. 规则通道与注入通道
a)规则通道组:

i)相当正常运行的程序。最多16个通道。规则通道和它的转换顺序在ADC_SQRx寄存器中选择,规则组转换的总数应写入ADC_SQR1寄存器的L[3:0]中。

ii)规则通道中的转换顺序由三个寄存器控制:SQR1、SQR2、SQR3,它们都是32位寄存器。SQR寄存器控制着转换通道的数目和转换顺序,只要在对应的寄存器位SQx中写入相应的通道,这个通道就是第x个转换。

STM32 | STM32CubeMX基础之ADC
STM32 | STM32CubeMX基础之ADC
STM32 | STM32CubeMX基础之ADC
b)注入通道组:

i)相当于中断。最多4个通道。注入组和它的转换顺序在ADC_JSQR寄存器中选择。注入组里转化的总数应写入ADC_JSQR寄存器的JL[1:0]中。

ii)和规则通道转换顺序的控制一样,注入通道的转换也是通过注入寄存器来控制,只不过只有一个JSQR寄存器来控制。

STM32 | STM32CubeMX基础之ADC
4. 规则通道与注入通道

ADC需要一个触发信号来实行模/数转换,其一就是通过直接配置寄存器触发,通过配置控制寄存器CR2的ADON位,写1时开始转换,写0时停止转换。另外,还可以通过内部定时器或者外部IO触发转换,也就是说可以利用内部时钟让ADC进行周期性的转换,也可以利用外部IO使ADC在需要时转换,具体的触发由控制寄存器CR2决定。

STM32 | STM32CubeMX基础之ADC
5.转换时间

ADC的每一次信号转换都要时间,这个时间就是转换时间,转换时间由输入时钟和采样周期来决定。

a)输入时钟

由于ADC在STM32中是挂载在APB2总线上的,所以ADC得时钟是由PCLK2经过分频得到的。

b)采样周期

ADC预分频器的ADCCLK是ADC模块的时钟来源。通常,由时钟控制器提供的ADC_CLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器。 分频因子由RCC_CFGR的ADCPRE[1:0]配置,可配置2/4/6/8分频。

为了保证ADC转换结果的准确性,ADC的时钟最好不超过14M。

STM32 | STM32CubeMX基础之ADC
T = 采样时间 + 12.5个周期,其中1周期为1/ADC_CLK

例如,当 ADC_CLK=14Mhz 的时候,并设置 1.5 个周期的采样时间,则得到: Tcovn=1.5+12.5=14 个周期=1us。

6.数据寄存器

转换完成后的数据就存放在数据寄存器中,但数据的存放也分为规则通道转换数据和注入通道转换数据的。

a)规则数据寄存器

规则数据寄存器负责存放规则通道转换的数据,通过32位寄存器ADC_DR来存放。当使用ADC独立模式(也就是只使用一个ADC,可以使用多个通道)时,数据存放在低16位中,当使用ADC多模式时高16位存放ADC2的数据。需要注意的是ADC转换的精度是12位,而寄存器中有16个位来存放数据,所以要规定数据存放是左对齐还是右对齐。

STM32 | STM32CubeMX基础之ADC

当使用多个通道转换数据时,会产生多个转换数据,然而数据寄存器只有一个,多个数据存放在一个寄存器中会覆盖数据导致ADC转换错误,所以我们经常在一个通道转换完成之后就立刻将数据取出来,方便下一个数据存放。一般开启DMA模式将转换的数据,传输在一个数组中,程序对数组读操作就可以得到转换的结果。

b)注入数据寄存器
STM32 | STM32CubeMX基础之ADC
7.数据寄存器
STM32 | STM32CubeMX基础之ADC
a)规则通道转换完成中断

规则通道数据转换完成之后,可以产生一个中断,可以在中断函数中读取规则数据寄存器的值。这也是单通道时读取数据的一种方法。

b)注入通道转换完成中断

注入通道数据转换完成之后,可以产生一个中断,并且也可以在中断中读取注入数据寄存器的值,达到读取数据的作用。

c)模拟看门狗事件

当输入的模拟量(电压)不再阈值范围内就会产生看门狗事件,就是用来监视输入的模拟量是否正常。

以上中断的配置都由ADC_SR寄存器决定:

STM32 | STM32CubeMX基础之ADC

链接:STM32—ADC详解_stm32adc功能详解_Aspirant-GQ的博客-CSDN博客

二、ADC的转换模式
1. 单次转换模式

ADC只执行一次转换;

2. 连续转换模式(Continuous Conversion Mode)

转换结束之后马上开始新的转换;

3. 扫描模式(Scan Conversion Mode)

ADC扫描被规则通道和注入通道选中的所有通道,在每个组的每个通道上执行单次转换。在每个转换结束时,这一组的下一个通道被自动转换。如果设置了CONT位(开启了连续 转换模式),转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

扫描模式简单的说是一次对所有所选中的通道进行转换,比如开了ch0、ch1、ch4、ch5。ch0转换完以后就会自动转换通道1、4、5直到转换完这个过程不能被打断。如果开启了连续转换模式,则会在转换完ch5之后开始新一轮的转换。

4. 间断模式(Discontinuous Conversion Mode)

触发一次,转换一个通道,在触发,在转换。在所选转换通道循环,由触发信号启动新一轮的转换,直到转换完成为止。

间断模式可以说是对扫描模式的一种补充。它可以把0、1、4、5这四个通道进行分组。可以分成0、1一组,4、5一组。也可以每个通道单独配置为一组。这样每一组转换之前都需要先触发一次。

三、ADC单通道与多通道
  1. ADC单通道

只进行一次ADC转换:配置为“单次转换模式”,扫描模式关闭。ADC通道转换一次后,就停止转换。等待再次使能后才会重新转换。

进行连续ADC转换:配置为“连续转换模式”,扫描模式关闭。ADC通道转换一次后,接着进行下一次转换,不断连续。

  1. ADC多通道

只进行一次ADC转换:配置为“单次转换模式”,扫描模式使能。ADC的多个通道,按照配置的顺序依次转换一次后,就停止转换。等待再次使能后才会重新转换。

进行连续ADC转换:配置为“连续转换模式”,扫描模式使能。ADC的多个通道,按照配置的顺序依次转换一次后,接着进行下一次转换,不断连续。

需要注意的是,如果开启了多通道ADC,需要将每次转换的数据及时取出,否则会被后面的的数据覆盖掉。


链接:https://blog.csdn.net/as480133937/article/details/99627062

四、不同通道ADC采样不同引脚的电压示例
  1. STM32CubeMX设置
STM32 | STM32CubeMX基础之ADC
  1. 主函数
    while (1)
    {

        int16_t adcBuf[2];
        for(int i=0;i<2;i++)
        {
            HAL_ADC_Start(&hadc1);
            HAL_ADC_PollForConversion(&hadc1,50);
            adcBuf[i]=HAL_ADC_GetValue(&hadc1);
            printf("adc %d = %d \r\n",i,adcBuf[i]);
        }
        HAL_ADC_Stop(&hadc1);
        HAL_Delay(1000);
    }
  1. 配置分析

分析配置成这样的模式,扫描模式是在配置为多个通道必须打开的,CubeMX上也默认好了,只能使能。单次转换模式是我不需要不停的去采集每个通道值,而是把两个通道采集完以后就让它停止。间断模式可以让扫描的两个通道进行分成两个组,CubeMX参数里面Number of Discontinous Conversions是配置间断组每个组有几个通道的,这里必须配置为1(否则在获取ad值得时候只能读取到每个间断组最后一个通道)。


链接:https://blog.csdn.net/qq_35241004/article/details/120165458

  1. 输出结果

这里将PC4引脚连接到了GND,PC5引脚连接到了3.3V。文章来源地址https://www.toymoban.com/news/detail-459246.html

STM32 | STM32CubeMX基础之ADC

到了这里,关于STM32 | STM32CubeMX基础之ADC的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32CubeMX配置STM32G031多通道ADC采集(HAL库开发)

    时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向一定要勾选Use Micro LIB  获取ADC通道值 主函数   串口输出

    2024年02月15日
    浏览(44)
  • STM32CubeMX教程25 PWR 电源管理 - 睡眠、停止和待机模式

    开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 XCOM V2.6串口助手 使用STM32CubeMX软件配置STM32F407开发板的 PWR电源管理,并了解STM32的睡眠、停止和待机模式 睡眠模式可以立即进入,也可以在退出优先级

    2024年02月19日
    浏览(29)
  • STM32初学入门笔记(3):STM32CubeMX配置STM32实现多通道ADC+DMA读取模拟量

    模拟信号的读取是我们在做很多项目是都要用到的,而模拟量的读取就要依赖于ADC数模转换器。对于初学者,学习使用ADC可以很大的帮助以后的STM32学习。 目录 ADC简介 : DMA简介:  工程开始: STM32CubeMX配置区: 配置外部时钟: 配置调试: 配置ADC: 配置DMA: 配置串口: 配

    2024年02月09日
    浏览(41)
  • 野火STM32电机系列(六)Cubemx配置ADC规则和注入通道

    前文已经配置了GPIO、编码器 本节讲解CubeMXADC规则和注入通道 本文adc注入通道采用定时器触发,因此在上文定时器配置的基础上进行 常规信号(温度等)使用带DMA的常规通道连续采样 注入采样由定时器触发,采集电机三相电流,并进入adc中断执行10khz的控制程序 ADC硬件接口

    2024年02月08日
    浏览(36)
  • STM32CubeMx实现ADC多通道+DMA读取(HAL库)

    目录 一、实验结果  二、STM32CubeMx配置 三、main.c测试代码 1、RCC配置 (外部晶振选择8MHz。设置相应的分频器M=8,倍频器倍频系数N=336,分频器分频系数P=2,那么主PLL生成的第一个输出高速时钟PLLP为:168MHz)  2、SYS配置  3、ADC(规则)通道配置(独立模式,预分频4分频,1

    2024年02月15日
    浏览(44)
  • STM32 CubeMX ADC采集 单通道,多通道,内部温度(轮询,DMA,中断)(HAL库)

    12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部 信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右 对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定

    2024年02月06日
    浏览(70)
  • STM32CubeMX配置STM32G031多通道ADC + DMA采集(HAL库开发)

     时钟配置HSI主频配置64M  勾选打开8个通道的ADC  使能连续转换模式  添加DMA  DMA模式选择循环模式  使能DMA连续请求 采样时间配置160.5 转换次数为8  配置好8次转换的顺序  配置好串口,选择异步模式 配置好需要的开发环境并获取代码  修改main.c 串口重定向  串口重定向

    2024年02月08日
    浏览(47)
  • STM32CubeMX学习笔记16--- STM32内部FLASH

    1. 内部FLASH简介         之前的文章中介绍过STM32F1利用SPI与外部FLASH(W25QXX芯片)通讯的例程,本例程将介绍STM32F1的内部FLASH,通过内部FLASH实现数据读写操作。 不同型号的STM32,其FLASH容量也有所不同,最小的只有16K字节,最大的则达到了1024K字节。此处我们使用的是ST

    2024年04月09日
    浏览(36)
  • STM32开发(16)----CubeMX配置DMA

    本章介绍使用STM32CubeMX对DMA进行配置的方法,DMA的原理、概念和特点,配置各个步骤的功能,并通过串口DMA传输实验方式验证。 DMA(Direct Memory Access),即直接存储器访问。 DMA 传输方式无需 CPU 直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为

    2024年02月15日
    浏览(39)
  • 【STM32】定时器1触发ADC多(规则)通道采样+DMA(CUBEMX配置)

    在用单片机做电源控制时不得不提ADC采集,离散系统是有固定的执行周期的,所以我们采样也是要固定时间去采样。然后就是我希望pwm波(定时器1产出)的频率与采样频率一致。 我下面演示的是G431CBU6,当然其他芯片也大差不差了。 说一下大致流程,TIM1触发ADC采样,然后

    2024年02月01日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包