STM32 ADC

STM32的ADC(模数转换器)是其内部重要的模拟信号采集外设。以下是关于STM32 ADC的核心概念、特性及基本使用方法的综合介绍。

一、ADC简介与主要特性

STM32的ADC是逐次逼近型(SAR)模数转换器 ,具有12位分辨率 ,这意味着其输出数字值范围为0至4095。它包含多个通道(具体数量因型号而异,例如F1系列最多有18个通道:16个外部通道和2个内部通道),用于测量外部模拟信号或内部信号(如温度传感器、内部参考电压)。

其主要特性包括:

  • 多种转换模式:支持单次、连续、扫描和间断采样模式。
  • 触发方式灵活:可由软件、外部事件(如定时器)或外部中断触发。
  • 数据对齐 :12位转换结果可存储在16位数据寄存器中,支持左对齐或右对齐(常用右对齐)。
  • 独立通道采样时间:每个通道的采样时间可单独编程。
  • 模拟看门狗:可设置电压阈值,当输入电压超出范围时产生中断。
  • DMA支持:规则通道转换可产生DMA请求,实现数据自动搬运,不占用CPU。
  • 输入电压范围 :通常为0至3.3V(当VREF-接地,VREF+接VDDA时)。

二、ADC功能框图详解

  1. 输入通道与分组 :通道分为规则组注入组。规则组用于常规转换,最多16个通道;注入组最多4个通道,可中断规则组的转换序列,优先执行。
  2. 转换顺序 :规则组的转换顺序由寄存器ADC_SQR1~3设定;注入组的顺序由ADC_JSQR寄存器设定。
  3. 转换模式
    • 单次转换模式:触发一次,转换一个通道或序列后停止。
    • 连续转换模式:上一次转换结束后自动开始下一次转换。
    • 扫描模式:使能后,ADC会按预设顺序自动转换多个通道。
  4. 数据寄存器 :规则组转换结果存储在ADC_DR寄存器中;注入组的结果存储在ADC_JDRx寄存器中。

三、关键概念

  • 数据对齐:12位结果在16位寄存器中可右对齐(直接读取)或左对齐(读取高8位可快速获取高8位结果,但数值放大了16倍)。
  • 转换时间 :总转换时间 = 采样时间 + 12.5个ADC时钟周期。采样时间可配置,ADC时钟(ADCCLK)由APB2时钟分频得到,最高通常为14MHz。例如,ADCCLK=12MHz,采样时间设为1.5周期,则最短转换时间约为1.17μs。
  • 校准:上电后建议执行ADC校准,以提高转换精度。

四、常见应用配置(基于HAL库)

1. 单通道轮询采集

适用于单路信号、非连续或低速采集的场景。

  • 配置要点
    • 模式:独立模式、非扫描、单次转换、软件触发。
    • GPIO :将对应引脚配置为模拟输入模式
  • 基本步骤
    1. 使能ADC和GPIO时钟。
    2. 初始化GPIO为模拟输入。
    3. 配置ADC句柄:设置对齐方式、扫描模式(禁用)、连续转换模式(禁用)、通道数、触发源(软件触发)等。
    4. 调用HAL_ADC_Init()初始化ADC。
    5. 执行校准HAL_ADCEx_Calibration_Start()
    6. 配置通道参数(通道号、采样时间、规则组排名)。
    7. 启动转换HAL_ADC_Start()
    8. 轮询等待转换完成HAL_ADC_PollForConversion()
    9. 读取转换值HAL_ADC_GetValue()
2. 多通道DMA采集

适用于多路信号、连续高速采集,能有效减轻CPU负担。

  • 配置要点
    • 模式:独立模式、扫描模式、连续转换模式、软件触发。
    • 使能ADC的DMA请求。
  • 基本步骤
    1. 使能ADC、GPIO和DMA时钟。
    2. 初始化GPIO为模拟输入。
    3. 配置DMA:设置外设地址(ADC数据寄存器)、内存地址(存储数组)、数据方向(外设到内存)、数据宽度、循环模式等。
    4. 配置ADC句柄:使能扫描和连续转换,设置通道数。
    5. 初始化ADC并校准。
    6. 配置多个ADC通道及其采样时间、顺序。
    7. 使用__HAL_LINKDMA()将ADC句柄与DMA句柄关联。
    8. 启动DMA传输HAL_ADC_Start_DMA()
    9. 转换完成后,DMA自动将数据搬运到指定数组,并可触发DMA传输完成中断。

五、HAL库配置流程总结

使用STM32CubeMX或代码配置时,一般遵循以下流程:

  1. 时钟与GPIO初始化:使能外设时钟,配置模拟输入引脚。
  2. ADC参数初始化 :通过ADC_InitTypeDef结构体配置工作模式、对齐方式、触发源等。
  3. ADC校准:执行上电校准。
  4. 通道配置 :通过ADC_ChannelConfTypeDef结构体为每个通道设置排名和采样时间。
  5. 启动与数据获取:根据需求选择轮询、中断或DMA方式启动转换并获取数据。

对于更高级的应用,如读取内部温度传感器或参考电压(VREFINT),需注意其对应的特定内部通道(如ADC1通道16、17),并参考数据手册中的计算公式将ADC值转换为实际物理量。

相关推荐
QK_002 小时前
STM32--编码器测速
stm32·单片机·嵌入式硬件
bu_shuo2 小时前
STM32 X-CUBE-MCSDK软件安装
stm32·单片机·嵌入式硬件
曾浩轩2 小时前
跟着江协科技学STM32之4-1OLED调试工具
科技·stm32·单片机·学习
v先v关v住v获v取13 小时前
番茄收获机切割与分离装置结构设计cad5张 +三维图+设计说明书
科技·单片机·51单片机
Zeku13 小时前
20251228 - Linux 驱动文件 (.ko) 深度解析笔记
stm32·freertos·linux驱动开发·linux应用开发
￴ㅤ￴￴ㅤ9527超级帅14 小时前
4、stm32异常与中断
stm32·单片机·嵌入式硬件
BreezeJuvenile15 小时前
通用定时器_测量PWM方波的周期和占空比案例
stm32·单片机·学习·通用定时器·pwm输入·测量占空比
进阶的猪15 小时前
stm32f407 RCC时钟配置
stm32·单片机·嵌入式硬件
ArrebolJiuZhou16 小时前
02arm指令集(一)——LDR,MOV,STR的使用
linux·网络·单片机