MCU开发学习记录11 - ADC学习与实践(HAL库) - 单通道ADC采集、多通道ADC采集、定时器触发连续ADC采集 - STM32CubeMX

 名词解释:

ADC: Analog-to-Digital
SAR:Successive Approximation Register

        本文将介绍ADC的概念、相关函数以及STM32CubeMX生成ADC的配置函数。针对于ADC实践:单通道采集芯片内部温度传感器(ADC1_ch16);利用软件触发单次触发多通道DMA ADC采集;利用定时器单次/连续触发多通道DMA ADC采集。

1. 什么是ADC?

1.1 ADC概念

1.1.0 ADC采集方法-逐次逼近寄存器型ADC

        通过 “逐位试探比较” 的方式,从最高位(MSB)到最低位(LSB)依次确定每一位的二进制值,最终生成与输入模拟信号对应的数字代码。其结构框图如下:

        

        一个4位转换示例,y轴(和图中的粗线)表示DAC的输出电压。本例中,第一次比较表明VIN < VDAC。所以,位3置为0。然后DAC被置为0b0100,并执行第二次比较。由于VIN > VDAC,位2保持为1。DAC置为0b0110,执行第三次比较。根据比较结果,位1置0,DAC又设置为0b0101,执行最后一次比较。最后,由于VIN > VDAC,位0确定为1。

        

1.1.1 ADC功能

        STM32的ADC(Analog-to-Digital Converter)是一个 ​12位逐次逼近型(SAR)模数转换器,支持多通道、多模式信号采集,

  • 分辨率​:可配置为12位、10位、8位或6位(通过牺牲分辨率提升转换速度)。
  • 输入通道​:最多19个复用通道,包括:
    • 16个外部引脚​(如温度、电压、电流传感器输入)。
    • 2个内部信号源​(内部温度传感器、内部参考电压)。
    • VBAT通道​:直接测量电池电压(需特定型号支持)。
  • 转换模式​:单次、连续、扫描、不连续采样模式。
  • 数据存储​:16位数据寄存器,支持左对齐或右对齐格式。
  • ADC 电源要求:全速运行时为 2.4 V 3.6 V ,慢速运行时为 1.8 V
  • ADC 输入范围: V REF-   <=  VIN  <= VREF+
  • 模拟看门狗(Analog Watchdog, AWD)​​:监测输入电压是否超出用户设定的阈值范围,触发中断或事件

1.1.2 ADC框图

        

        
        

    1.2 ADC功能介绍

    1.2.1 ADC开关控制、时钟选择、ADC通道选择

    1. ADC开关控制

    ADC_CR2.ADON (A/D Converter ON / OFF):(0为禁止ADC;1为使能ADC)
    ADC_CR2.SWSTART(Start conversion of regular channels):开始转换规则通道(1为开始转换)
    ADC_CR2.JSWSTART(Start conversion of injected channels):开始转换注入通道(1为开始转换)

    2. ADC时钟选择

    1. 模拟电路时钟(ADCCLK)- 所有 ADC 共用
      · 驱动ADC的模拟电路部分,包括采样保持电路(Sample&Hold)和SARADC。
      · RCC_CFGR中的ADCPRE位,设置ADC分频系数。
    2. 数字接口时钟
      · 等效时钟​:直接使用APB2总线时钟(f_{PCLK2}),无分频。
      · 使能控制​:通过RCC_APB2ENR寄存器为每个ADC独立使能/禁用数字接口时钟。
      __HAL_RCC_ADC1_CLK_ENABLE();   // 使能ADC1数字接口时钟

    3. ADC通道选择(分为规则转换和注入转换

            

            一个规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。
            

            下图为正点原子总结的规则组与寄存器对应表
            
            一个注入转换组 最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位。

            下图为正点原子总结的注入组与寄存器对应表
            

    1.2.2 模拟看门狗

    1. 发生模拟看门狗标志
      ADC_SR.AWD
    2. 模拟看门狗中断使能
      ADC_CR1.AWDIE
    3. 模拟看门狗保护区域
    4. 阈值上下限设置(V = VREF*HTR(LTR)/4096)
      ADC_HTR 与 ADC_LTR
    5. 模拟看门狗通道选择(ADC_CR1.AWDCH[4:0])


    1.2.3 单次转换模式、连续转换模式(ADC_CR2.CONT)

            ADC_CR2.CONT:0为单次转换模式;1为连续转换模式

            

    1. 单次转换触发方式

            ● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道)
            ● 将 JSWSTART 位置 1(适用于注入通道)
            ● 外部触发(适用于规则通道或注入通道)

    2. 单次转换流程

    • 规则通道转换完成​:
      1. 数据存储​:结果存入ADC_DR(16位数据寄存器)。
      2. 标志位​:EOC=1(转换结束标志)。
      3. 中断触发​:若EOCIE=1,产生中断通知CPU读取数据。
      4. ADC状态​:自动停止,等待下次触发。
    • 注入通道转换完成​:
      1. 数据存储​:结果存入ADC_JDR1(注入数据寄存器)。
      2. 标志位​:JEOC=1(注入转换结束标志)。
      3. 中断触发​:若JEOCIE=1,产生中断。
      4. ADC状态​:自动停止。

    3. 连续转换触发方式

    • 规则通道​:
      • 软件触发​:置位ADC_CR2.SWSTART=1
      • 外部触发​:配置外部触发源(如PWM同步信号)。
    • 注入通道限制​:
      • 默认禁止连续转换​:注入通道无法独立启动连续转换。
      • 唯一例外​:若使能自动注入(JAUTO=1),注入通道可在规则通道组之后 ​自动插入转换

    4. 连续转换触发方式

    规则通道组转换完成​:

    1. 数据存储​:最新结果覆盖ADC_DR寄存器。
    2. 标志位​:EOC=1(每次转换结束均置位)。
    3. 中断触发​:若EOCIE=1,每次转换均触发中断。
    4. ADC状态​:立即启动下一轮转换,无需外部触发

    自动注入模式(JAUTO=1)​

    • 功能​:在规则通道组转换完成后,自动插入注入通道转换。
    • 流程​:
      1. 规则通道组转换完成 → 触发注入通道转换。
      2. 注入通道结果存入ADC_JDR1JEOC=1
      3. 中断触发:若JEOCIE=1,通知CPU处理注入数据。
      4. ADC继续下一轮规则通道转换。

    1.2.4 扫描模式、注入通道管理

    1. 扫描模式

            ● ADC_CR1.SCAN 置1-选择扫描模式;
            ● 如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。

            ● ADC_SR.EOC:规则通道转换结束 (Regular channel end of conversion)
                    0:转换未完成 (EOCS=0) 或转换序列未完成 (EOCS=1)
                    1:转换已完成 (EOCS=0) 或转换序列已完成 (EOCS=1)
            ● ADC_CR2.EOCS:结束转换选择 (End of conversion selection)
                    0:在每个规则组转换序列结束时将
    EOC 位置 1。溢出检测仅在 DMA=1 时使能。
                    1:在每个规则通道转换结束时将 EOC 位置
    1。使能溢出检测。

    2. 注入通道管理(ADC_CR1.JAUTO
            

    ● 触发注入-配置条件

    • JAUTO位清零​:ADC_CR1.JAUTO=0(禁用自动注入)。
    • 触发源选择​:
      • 外部触发​:通过ADC_CR2.JEXTSEL选择触发源(如定时器、外部引脚)。
      • 软件触发​:置位ADC_CR2.JSWSTART=1

    ● 触发注入-工作流程

    • 启动规则通道组转换​:
      • 外部触发或软件触发规则组转换(如定时器触发)。
    • 触发注入事件​:
      • 在规则组转换期间,若检测到注入触发信号:
        • 复位当前规则转换​:立即停止当前规则通道的转换。
        • 执行注入组转换​:以单次扫描模式完成注入通道组的转换。
    • 恢复规则转换​:
      • 注入组完成后,从被中断的规则通道继续转换。

    ● 自动注入-配置条件

    • JAUTO位置1​:ADC_CR1.JAUTO=1(启用自动注入)。
    • 禁用注入触发​:必须关闭外部触发(ADC_CR2.JEXTEN=0)。
    • 连续模式支持​:
      • ADC_CR2.CONT=1,规则组和注入组将循环转换。

    ● 自动注入-工作流程

    • 规则组转换完成​:
      • 规则组转换结束后,自动启动注入组转换。
    • 注入组转换​:
      • ADC_JSQR配置的顺序转换注入通道,结果存入ADC_JDR1~4
    • 循环转换(CONT=1时)​​:
      • 注入组完成后,立即重启规则组转换。

    1.2.5 不连续采样模式

    1. 规则组

            ADC_CR1.DISCEN - 不连续采样模式使能
            ADC_CR1.DISCNUM[2:0] - n个子序列组
           
    ADC_SQR1.L[3:0] - 定义总序列长度
            

    2. 注入组

            ADC_CR1.JDISCEN - 不连续采样模式使能
            ADC_JSQR1.L[1:0] - 定义总序列长度
            

            不能同时使用自动注入和不连续采样模式。
            不得同时为规则组和注入组设置不连续采样模式。只能针对一个组使能不连续采样模式。

    1.3 数据对齐、通道采样时间、快速转换模式

    1.3.0 规则/注入数据寄存器

    1. 规则数据寄存器(ADC_DR

            

    2. 注入数据寄存器(ADC_JOFRx、ADC_JDRx

            ADC_JDRx = 结果 - ADC_JOFRX (取16位补码)
            SEXT位(扩展的符号值):负数填充1;正数填充0

            

    1.3.1 数据对齐ADC_CR2.ALIGN

            ALIGN =0 右对齐(默认);=1 左对齐。

    1. 右对齐(参考1.3.0)

            

    2. 左对齐(参考1.3.0)

            

    1.3.2 通道采样时间与转换时间

            通过ADC_SMPR1、ADC_SMPR2的SMPx[2:0]控制各个通道的采样周期。

            

    1.3.3 快速转换模式(降低精度转换)ADC_CR1.RES 

            可通过降低 ADC 分辨率来执行快速转换。下列为转换时间。
            

            ● 12 位:3 + 12 = 15 ADCCLK 周期
            ● 10 位:3 + 10 = 13 ADCCLK 周期
            ● 8 位:3 + 8 = 11 ADCCLK 周期
            ● 6 位:3 + 6 = 9 ADCCLK 周期

    1.4 外部触发和触发极性

    1.4.1 外部触发极性

            

            

    1.4.2. 外部触发条件

     

    1.5 ADC数据采集方式(三种)

    1.5.1 使用 DMA(ADC_CR2.DMA 置1)

    0. DDS决定DMA是否可以连续请求
            如果将 ADC_CR2 寄存器中的 DDS 位清零,则不会向 DMA 控制器发出新的 DMA 请求(这可避免产生溢出错误)。不过,硬件不会将 DMA 位清零。必须将该位写入 0 然后写入 1 才能启动新的传输。
            如果将 DDS 位置 1 ,则可继续生成请求。从而允许在双缓冲区循环模式下配置 DMA

    1. 配置步骤

    • 使能DMA:置位ADC_CR2寄存器中的DMA位。
    • 配置DMA控制器:设置目标地址(内存缓冲区)和传输次数(NDTR计数器)。

    2. 数据丢失(溢出)处理

    • 溢出标志​:若数据未及时读取且DMA未传输,ADC_SR寄存器中的OVR位会置1,并可能触发中断(需使能OVRIE位)。
    • 溢出后果​:
      • DMA传输被禁止,后续DMA请求被忽略。
      • 正在进行的规则转换被中止,后续规则触发无效。
    • 恢复步骤​:
      1. 重新初始化DMA​:调整目标地址和NDTR计数器。
      2. 清除溢出标志​:将ADC_SR中的OVR位清零。
      3. 重启转换​:触发ADC开始新的转换。

    3. DMA传输结束

    • ADC_CR2DDS位为0,最后一次传输后停止DMA请求,需手动复位DMA位(先写0再写1)重启。
    • DDS位为1,DMA继续生成请求,支持双缓冲区循环模式(适合连续流数据)。

    1.5.2 在不使用 DMA 的情况下管理转换序列

    1. 配置步骤

    • 禁止DMA:ADC_CR2DMA位清零。
    • 使能每次转换结束中断:置位ADC_CR1EOCS位为1(EOC在每次转换结束时置1)。
    • 溢出处理​:
      • 与DMA模式相同:需手动清除OVR位并重启转换。

    2. 配置步骤

    • 启动转换序列​:触发ADC开始转换。
    • 等待EOC标志​:每次转换结束,EOC位置1。
    • 读取数据​:从ADC_DR读取当前通道数据。
    • 处理溢出​(若发生):清除OVR位并重启转换。

    1.5.3 在不使用 DMA 和溢出检测的情况下进行转换

    • 禁止DMA:ADC_CR2DMA位清零。
    • 仅在序列结束置位EOC:EOCS位清零。
    • 禁用溢出检测:默认情况下溢出检测已关闭。

    1.6 多重 ADC 模式

    1.6.1 多重 ADC 模式介绍(ADC_CCR.MULTI[4:0])

            

    1. 四种模式(也可以组合使用)

            ● 注入同时模式
            ● 规则同时模式
            ● 交替模式
            ● 交替触发模式
            ● 注入同时模式 + 规则同时模式
            ● 规则同时模式 + 交替触发模式

    2. 多重ADC框图

    注: 1. 尽管 ADC2 ADC3 上存在外部触发,但它们并未显示在此图中。
            2. 在双重 ADC 模式下,不存在 ADC3 从器件部分。
            3. 在三重 ADC 模式下,ADC 通用数据寄存器 (ADC_CDR) 包含 ADC1ADC2 ADC3 的规则转换数据。按照所选的存储顺序使用全部 32 个寄存器位。在双重 ADC 模式下,ADC 通用数据寄存器 (ADC_CDR) 包含 ADC1 ADC2 的规则转换数据。使用全部32个寄存器位。

    1.6.2 多重模式下DMA模式(ADC_CCR.DMA[1:0])(三种)

            

    1. DMA模式1(半字传输)

    1. 核心特性
      传输单位​:每个DMA请求传输 ​一个半字(16位)​,对应单个ADC的转换结果。
      触发条件​:每完成一次ADC转换(一个数据项可用)时触发DMA请求。
    2. 数据传输顺序
      · 两重模式
      请求顺序为 ​ADC1→ADC2→ADC1→ADC2...​,依次循环。

      · 三重模式
      请求顺序为 ​ADC1→ADC2→ADC3→ADC1→ADC2→ADC3...​,依次循环。
    3. 应用场景
      规则同时模式​:需要逐个读取多ADC数据的场景。
      示例​:多通道温度监测,ADC1、ADC2、ADC3分别采集不同区域的温度值。

    2. DMA模式2(字传输)

    1. 核心特性
      传输单位​:每个DMA请求传输 ​一个字(32位)​,包含 ​两个半字​(两个ADC的转换结果)。
      触发条件​:每完成两次ADC转换(两个数据项可用)时触发DMA请求。
    2. 数据传输顺序

       · 两重模式
      每个字的高16位存储 ​ADC2数据,低16位存储 ​ADC1数据

      · 三重模式
      按 ​固定组合顺序​ 传输三个ADC的数据,每个字包含两个半字:

    3. 应用场景
      交替模式​:需要同时读取两个ADC数据的场景,例如电机控制中电流和电压同步采集。
      示例​:双重交替模式下,ADC1采集电流信号,ADC2采集电压信号,每个DMA请求同时传输两者数据。

    3. DMA模式3(字节传输)

    1. 核心特性
      传输单位​:每个DMA请求传输 ​两个字节(8位×2)​,适用于 ​6位或8位分辨率​ 的ADC。
      触发条件​:每完成两次ADC转换(两个数据项可用)时触发DMA请求。
    2. 数据传输顺序
       · 两重模式
      每个DMA请求的高8位存储 ​ADC2数据,低8位存储 ​ADC1数据
      · 三重模式
      数据传输顺序与DMA模式2相似,但以字节为单位:
    3. 应用场景
      规则同时模式​:适用于6位或8位ADC的快速数据采集,简单传感器信号(如光敏电阻)。
      示例​:ADC1和ADC2分别采集两个低分辨率传感器的开关状态。

    1.7 多重 ADC 模式

    1.7.1 注入同时模式

            此模式可转换注入通道组。外部触发源来自 ADC1 的注入组多路复用器(通过 ADC1_CR2寄存器中的 JEXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 ADC3
    注:
            1.  不要在两个 / 三个 ADC 上转换同一通道
            2. 使用同一长度来转换序列,或必须确保触发之间的间隔长于 2 个序列(双重 ADC 模式)/3 个序列(三重 ADC 模式)中的较长时间。
     
    1. 双重ADC
            ● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
            ● 当 ADC1/ADC2 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在两个 ADC 接口中的一个接口上使能)。
    2. 三重ADC
            ● 转换的数据会存储在各个 ADC 接口的 ADC_JDRx 寄存器中。
            ● 当 ADC1/ADC2/ADC3 的注入通道全部完成转换后,会生成一个 JEOC 中断(如果已在三个 ADC 接口中的一个接口上使能)。
            

    1.7.2 规则同时模式(ADC_CDR

    ADC_CDR:适用于双重和三重模式的 ADC 通用规则数据寄存器

            用于规则通道组。外部触发源来自 ADC1 的规则组多路复用器(通过 ADC1_CR2 寄存器中的 EXTSEL[3:0] 位进行选择)。同时触发可用于 ADC2 ADC3

    注:必须禁止注入转换。

            

    1. 双重ADC

    • 触发条件​:当任意一个ADC(ADC1或ADC2)完成一次转换时,触发DMA请求。
    • DMA配置​:
      • 设置 ADC_CCR 寄存器的 DMA[1:0] = 0b10
      • 生成 ​单次32位DMA传输请求,将 ​ADC2和ADC1的转换数据​ 组合传输。
    • 数据格式​:
      • 32位数据寄存器 ADC_CDR 的高16位存储 ​ADC2的转换结果,低16位存储 ​ADC1的转换结果
      • 示例:若ADC1转换值为 0x1234,ADC2转换值为 0x5678,则 ADC_CDR = 0x56781234
    • 传输流程​:
      1. DMA将 ADC_CDR 高16位(ADC2数据)写入SRAM目标地址。
      2. DMA将 ADC_CDR 低16位(ADC1数据)写入下一个SRAM地址。
      3. 重复直到所有通道转换完成。

        • ​中断生成:
             EOC中断
    ​:当 ​所有常规通道均完成转换​ 后,触发EOC(转换结束)中断。
             中断使能​:需在 ​至少一个ADC接口​ 的 ADC_CR1 寄存器中使能 EOCIE 位。

            

    2. 三重ADC

    • 触发条件​:当任意一个ADC(ADC1、ADC2或ADC3)完成一次转换时,触发DMA请求。
    • DMA配置​:
      • 设置 ADC_CCR 寄存器的 DMA[1:0] = 0b01
      • 生成 ​三次32位DMA传输请求,分别传输 ​ADC1、ADC2、ADC3的转换数据
    • 数据格式​:
      • 每个ADC的转换结果存储在独立的 ADC_CDR 寄存器中。
      • 传输顺序:先ADC1→再ADC2→最后ADC3。
    • 传输流程​:
      1. 第一次DMA传输:ADC1数据写入SRAM地址A。
      2. 第二次DMA传输:ADC2数据写入地址A+4(32位对齐)。
      3. 第三次DMA传输:ADC3数据写入地址A+8。
      4. 重复直到所有通道转换完成。
    • 中断生成
      EOC中断​:当 ​所有常规通道均完成转换​ 后,触发EOC(转换结束)中断。
      中断使能​:需在 ​至少一个ADC接口​ 的 ADC_CR1 寄存器中使能 EOCIE 位。

            

    1.7.3 交替模式

    此模式只能用于规则组(通常为一个通道)。外部触发源来自 ADC1 的规则通道多路复用器
    ADC_CCR.DELAY[3:0] - 设置交替模式下的采样时间。

            

    1. 双重 ADC 模式

            ADC1立即启动,经过几个ADC时钟周期延迟后ADC2启动。

            只有一共ADC能够对输入信号采样,即DELAY设置的延迟时间小于采用时间时,延迟时间=采样时间+2个ADC_CLK时钟周期。如果 ADC1 和 ADC2 上的 CONT 位均置 1,则这两个 ADC 所选规则通道会连续进行转换。

            

            

    2. 三重 ADC 模式

            ADC1 立即启动,经过几个ADC时钟周期延迟后ADC2启动,在ADC2转换经过几个ADC时钟周期的延迟后ADC3启动。

            
            

    1.7.4 交替触发模式

            只能用于注入组。外部触发源来自 ADC1 的注入组多路复用器。

            

    1. 双重 ADC 模式

            发生第一次触发时,将转换ADC1中注入组的所有通道
                    当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)
            发生第二次触发时,将转换ADC2中注入组的所有通道
                    当组中的所有注入 ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)

            

    如果使能 ADC1 和 ADC2 的注入不连续采样模式:

            ● 发生第一次触发时,将转换第一个注入 ADC1 通道
            ● 发生第二次触发时,将转换第一个注入 ADC2 通道
            ● 发生第三次触发时,将转换第二个注入 ADC1 通道
            ● 发生第四次触发时,将转换第二个注入 ADC2 通道
            ……
            当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)
            当组中的所有注入
    ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)

            

    2. 三重 ADC 模式

            发生第一次触发时,将转换ADC1中注入组的所有通道
                    当组中的所有注入 ADC1 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)
            发生第二次触发时,将转换ADC2中注入组的所有通道
                    当组中的所有注入 ADC2 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)
            ● 发生第三次触发时,将转换ADC3中注入组的所有通道
                    当组中的所有注入 ADC3 通道都转换完成后,会生成一个 JEOC 中断(如果已使能)

            

    1.7.5 混合型规则/注入同时模式

    可以中断规则组的同时转换,然后开始注入组的同时转换。

    1.7.6 规则同时 + 交替触发组合模式

            可以中断规则组的同时转换,然后开始注入组的交替触发转换。

            注入事件后立即开始注入交替转换。当规则转换处于运行状态时,为确保在注入转换后实现同步,所有的(主/从) ADC规则转换均将停止,并会在注入转换结束时得以恢复运行。
            

            

    1.8 ADC中断

    ADC_SR 寄存器中存在另外两个标志,但这两个标志不存在中断相关性:
            ● JSTRT(开始转换注入组的通道)
            ● STRT(开始转换规则组的通道)
    中断事件标志位使能控制位触发条件
    规则组转换结束EOCEOCIE规则通道组所有通道转换完成(单通道或扫描模式)
    注入组转换结束JEOCJEOCIE注入通道组所有通道转换完成(需外部触发或自动注入)
    模拟看门狗状态位置 1AWDAWDIE输入电压超过模拟看门狗阈值(高 / 低阈值由 ADC_HTR 和 ADC_LTR 定义)
    数据溢出(Overrun)OVROVRIE数据寄存器(ADC_DR 或 ADC_JDRx)未及时读取,新数据覆盖旧值

    2. 基于HAL库配置ADC外设

    2.1 CubeMX配置ADC外设

    2.1.1 单通道采集内部温度传感器

             

    2.1.2 多通道ADC采集(单次DMA请求)

            

            

    2.1.3 多通道ADC采集 (定时器触发ADC采集(单次/连续))

             
            

    2.2 基本定时器寄存器基地址

            

    2.3 基本定时器寄存器

            
            

    3. ADC实践

    本次实践分为三个部分:单通道采集芯片内部温度传感器(ADC1_ch16);利用软件触发单次触发多通道DMA ADC采集;利用定时器单次/连续触发多通道DMA ADC采集。

    多通道是内部温度传感器(ADC1_ch16)、光敏传感器(ADC1_ch1)

    3.1 单通道采集内部温度传感器(查询)

    1. main函数
    2. 功能函数

    3. 实践结果

     3.2 多通道ADC采集(单次DMA)

    1. main函数
    2. 中断回调函数
    3. 实践结果

            

     3.3 多通道ADC采集(定时器单次/连续触发DMA)

    1. main函数
    2. 中断回调函数
    3. 实践结果

    4. 本文的工程文件下载链接

    工程Github下载链接:https://github.com/chipdynkid/MCU-DL-STM32
    (国内)工程Gitcode下载链接https://gitcode.com/chipdynkid/MCU-DL-STM32

    本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/78042.shtml

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

    相关文章

    68元撬动未来:明远智睿2351开发板重塑嵌入式开发生态

    在嵌入式开发领域&#xff0c;价格与性能的矛盾始终存在&#xff1a;高端开发板功能强大但成本高昂&#xff0c;低价产品则往往受限于性能与扩展性。明远智睿2351开发板以68元&#xff08;含税&#xff09;的定价打破这一僵局&#xff0c;通过四核1.4G处理器、全功能Linux系统与…

    关于ubuntu密码正确但是无法登录的情况

    参考这个文章&#xff1a; https://blog.csdn.net/cuichongxin/article/details/117462494 检查一下是不是用户被lock了 输入passwd -s username 如果用户是L状态&#xff0c;那么就是lock了。 使用 passwd -u username 解锁 关于 .bashrc 不生效 有几点&#xff1a; ~/.…

    LeetCode-47. 全排列 II

    1、题目描述&#xff1a; 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,2] 输出&#xff1a; [[1,1,2],[1,2,1],[2,1,1]]示例 2&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&am…

    Python 设计模式:访问者模式

    1. 什么是访问者模式&#xff1f; 访问者模式是一种行为设计模式&#xff0c;它允许你在不改变对象结构的前提下&#xff0c;定义新的操作。通过将操作封装在访问者对象中&#xff0c;访问者模式使得你可以在不修改元素类的情况下&#xff0c;向元素类添加新的功能。 访问者模…

    基于stm32的智能门锁系统

    标题:基于stm32的智能门锁系统 内容:1.摘要 摘要&#xff1a;随着科技的飞速发展&#xff0c;人们对家居安全的要求日益提高&#xff0c;智能门锁系统应运而生。本研究的目的是设计并实现一个基于STM32的智能门锁系统。采用STM32微控制器作为核心控制单元&#xff0c;结合指纹…

    GitHub 常见高频问题与解决方案(实用手册)

    目录 1.Push 提示权限错误(Permission denied) 2.push 报错:rejected non-fast-forward 3.忘记添加 .gitignore,上传了无关文件 4. 撤销最近一次 commit 5.clone 太慢或失败 6.如何切换/创建分支 7.如何合并分支 8.如何删除远程分支 9.如何 Fork + PR(Pull Reque…

    【MySQL数据库入门到精通-04 DML操作】

    一、DML DML英文全称是Data Manipulation Language(数据操作语言)&#xff0c;用来对数据库中表的数据记录进行增、删、改操作。 二、添加数据 1.给指定字段添加数据 代码如下&#xff08;示例&#xff09;&#xff1a; insert into 表名 &#xff08;字段1&#xff0c;字…

    2022 年 9 月青少年软编等考 C 语言六级真题解析

    目录 T1. 栈的基本操作T2. stack or queue思路分析T3. 合影效果T4. 发型糟糕的一天思路分析T1. 栈的基本操作 题目链接:SOJ D1188 此题为 2022 年 6 月三级第二题仅有栈操作的版本,见 2022 年 6 月青少年软编等考 C 语言三级真题解析中的 T2。 T2. stack or queue 题目链…

    美创市场竞争力突出!《2025中国数据安全市场研究报告》发布

    数据要素时代&#xff0c;数据已成国家战略性资源&#xff0c;数据安全关乎国家安全&#xff01;数说安全发布的《2025中国数据安全市场研究报告》&#xff08;以下简称《报告》&#xff09;显示&#xff0c;2024年数据安全市场逆势增长&#xff0c;市场规模首次突破百亿。《报…

    VUE Element-ui Message 消息提示组件自定义封装

    为了让message 信息提示的更加方便快捷&#xff0c;减少不同地方的调用&#xff0c;避免代码的重复&#xff0c;特意再官方message 组件的基础上二次封装&#xff0c;使代码更加的优雅和高效。 实现效果&#xff1a; 代码组件&#xff1a; 封装成 message.js 文件&#xff0c;…

    高防IP能抵御哪些类型的网络攻击?

    高防IP&#xff08;High Defense IP&#xff09;是一种专门针对网络攻击设计的防护服务&#xff0c;主要通过流量清洗、协议分析、行为检测等技术抵御多种网络攻击。以下是其能防御的主要攻击类型及原理&#xff1a; ​​一、常见防御的攻击类型​​ ​​DDoS攻击&#xff08;分…

    小红书文字配图平替工具

    小红书的文字配图只有手机版有&#xff0c;想找一个电脑版的&#xff0c;查了一下。以下是几款类似小红书风格的花字、艺术字生成工具&#xff0c;适合制作吸睛的社交媒体配图&#xff0c;分为 手机APP 和 在线工具 两类&#xff0c;供你选择&#xff1a; 一、手机APP推荐 醒图…

    【浙江大学DeepSeek公开课】走向数字社会:从DeepSeek到群体智慧

    从DeepSeek到群体智慧 一、人工智能发展脉络二、DeepSeek大模型的意义与特点三、人工智能促进社会数字化转型四、群体智慧与数字社会 一、人工智能发展脉络 图灵与图灵机&#xff1a;1937年&#xff0c;图灵发表论文《On computable numbers, with an application to the Ents…

    解读大型语言模型:从Transformer架构到模型量化技术

    一、生成式人工智能概述 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff09;是一种先进的技术&#xff0c;能够生成多种类型的内容&#xff0c;包括文本、图像、音频以及合成数据等。其用户界面的便捷性极大地推动了其广泛应用&#xff0c;用户仅需在…

    JSON实现动态按钮管理的Python应用

    在开发桌面应用程序时&#xff0c;动态生成用户界面元素并根据配置文件灵活管理是一项常见需求。本文将介绍如何使用Python的wxPython库结合JSON配置文件&#xff0c;开发一个支持动态按钮创建、文件执行和配置管理的桌面应用程序。该应用允许用户通过设置界面配置按钮名称和关…

    序章:写在前面

    目录 为什么要学习 Python&#xff1f;那么&#xff0c;Python 到底是什么呢&#xff1f;Python 的用户多吗&#xff1f;Python 的语法究竟是怎样的&#xff1f;C 语言JavaPython Python 好学吗&#xff1f; 为什么要学习 Python&#xff1f; 这个问题或许会让不少人感到不解。…

    onlyoffice历史版本功能实现,版本恢复功能,编辑器功能实现 springboot+vue2

    文章目录 oonlyoffice历史版本功能实现 &#xff08;编辑器功能实现&#xff09;springbootvue2前提 需要注意把这个 (改成自己服务器的ip或者域名) 改成 自己服务器的域名或者地址1. onloyoffice 服务器部署 搜索其他文章2. 前段代码 vue 22.1 需要注意把这个 (改成自己服务器…

    解决ubuntu server修改为中文后乱码问题(改回英文)

    操作步骤 1.安装英文语言包 sudo apt-get install language-pack-en2.编辑/etc/default/locale文件 sudo vim /etc/default/locale修改为以下内容&#xff1a; LANG"en_US.UTF-8" LANGUAGE"en_US:en" LC_ALL"en_US.UTF-8"3.应用配置 sudo l…

    安卓的Launcher 在哪个环节进行启动

    安卓Launcher在系统启动过程中的关键环节启动&#xff0c;具体如下&#xff1a; 内核启动&#xff1a;安卓设备开机后&#xff0c;首先由引导加载程序启动Linux内核。内核负责初始化硬件设备、建立内存管理机制、启动系统进程等基础工作&#xff0c;为整个系统的运行提供底层支…

    数据通信学习笔记之OSPF其他内容2

    OSPF 与 BFD 联动 网络上的链路故障或拓扑变化都会导致设备重新进行路由计算&#xff0c;所以缩短路由协议的收敛时间对于提高网络的性能是非常重要的。 OSPF 与 BFD 联动就是将 BFD 和 OSPF 关联起来&#xff0c;一旦与邻居之间的链路出现故障&#xff0c;BFD 对完品以&…