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

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

3天内不再提示

stm32 adc 的用法

分享:

STM32 的 ADC(模数转换器)用法可以分为以下几个步骤,以 STM32 HAL 库为例:


1. 初始化配置

a. 启用 ADC 时钟

main() 函数中启用 ADC 对应的外设时钟(如 ADC1):

__HAL_RCC_ADC1_CLK_ENABLE();

b. 配置 ADC 参数

使用 HAL_ADC_Init() 初始化 ADC,并配置 ADC_HandleTypeDef 结构体:

ADC_HandleTypeDef hadc1;
hadc1.Instance = ADC1;                     // 选择 ADC 实例(如 ADC1、ADC2 等)
hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 分辨率(12位、10位等)
hadc1.Init.ScanConvMode = DISABLE;          // 扫描模式(单通道禁用,多通道启用)
hadc1.Init.ContinuousConvMode = DISABLE;    // 连续转换模式(单次 or 连续)
hadc1.Init.DiscontinuousConvMode = DISABLE; // 间断模式
hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 触发方式(软件触发/外部触发)
// 其他参数根据需求配置
HAL_ADC_Init(&hadc1);

c. 配置 ADC 通道

使用 HAL_ADC_ConfigChannel() 配置具体的 ADC 通道:

ADC_ChannelConfTypeDef sConfig;
sConfig.Channel = ADC_CHANNEL_0;            // 选择通道(如 PA0 对应 ADC_CHANNEL_0)
sConfig.Rank = ADC_REGULAR_RANK_1;          // 转换顺序(多通道时设置优先级)
sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; // 采样时间(影响转换精度和速度)
HAL_ADC_ConfigChannel(&hadc1, &sConfig);

2. 校准 ADC

在初始化后执行校准,提高精度:

HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED); // 单端输入校准

3. 使用 ADC

a. 轮询模式(Polling)

HAL_ADC_Start(&hadc1);                   // 启动 ADC 转换
if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) { // 等待转换完成
    uint16_t adc_value = HAL_ADC_GetValue(&hadc1); // 读取转换结果(12位值)
}
HAL_ADC_Stop(&hadc1);                    // 停止 ADC(单次模式需手动停止)

b. 中断模式(Interrupt)

启用 ADC 转换完成中断:

HAL_ADC_Start_IT(&hadc1);  // 启动 ADC 中断模式
// 在中断回调函数中读取数据:
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
    uint16_t adc_value = HAL_ADC_GetValue(hadc);
}

c. DMA 模式(多通道/连续采样)

配置 DMA 传输数据到内存:

// 初始化 DMA(需配置 DMA 通道和内存地址)
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)adc_buffer, buffer_size); 
// adc_buffer 是存储结果的数组

4. 注意事项

  1. 参考电压(VREF+):确保 ADC 的参考电压稳定(通常连接到芯片的 VDDA)。
  2. 采样时间:较长的采样时间可提高精度(尤其是高阻抗信号源)。
  3. 电源噪声:ADC 对电源噪声敏感,建议在 VDDA 和 VSSA 引脚添加滤波电容。
  4. 通道与引脚对应:不同型号的 STM32 ADC 通道对应不同 GPIO 引脚,需查阅数据手册。
  5. 校准:每次上电后建议执行校准。

示例代码(单通道轮询)

// 初始化 ADC1 通道0(PA0)
ADC_HandleTypeDef hadc1;
void ADC_Init() {
    __HAL_RCC_ADC1_CLK_ENABLE();
    hadc1.Instance = ADC1;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    hadc1.Init.ScanConvMode = DISABLE;
    hadc1.Init.ContinuousConvMode = DISABLE;
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    HAL_ADC_Init(&hadc1);

    ADC_ChannelConfTypeDef sConfig;
    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_15CYCLES;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);

    HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);
}

// 读取 ADC 值
uint16_t Read_ADC() {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, 10);
    uint16_t value = HAL_ADC_GetValue(&hadc1);
    HAL_ADC_Stop(&hadc1);
    return value;
}

通过以上步骤,可以快速实现 STM32 ADC 的数据采集。具体参数需根据实际硬件和应用场景调整。

STM32ADC用法

AD采样在电路中是一种比较常见的功能,可以用于电池电压检测、传感器值读取、信号采集等。STM32ADC,由于引入了DMA,以及多种触发源,功能自然强大,用法也多种多样。

2022-04-08 09:33:52

STM32ADC用法你都知道吗?

AD采样在电路中是一种比较常见的功能,可以用于电池电压检测、传感器值读取、信号采集等。STM32ADC,由于引入了DMA,以及多种触发源,功能自然强大,用法也多种多样。这里简单

2021-06-29 15:07:12

STM32ADC用法,你知道几种?

AD采样在电路中是一种比较常见的功能,可以用于电池电压检测、传感器值读取、信号采集等。STM32ADC,由于引入了DMA,以及多种触发源,功能自然强大,用法也多种多样。今天,我们简单说说在单通道

XYD漫漫 2022-04-09 09:22:03

ADC怎么使用

ADC即模数转换器,能把模拟量(电压)转换为数字量。这一节我们讲讲stm32ADC用法stm32自带的ADC有四种用法:轮询、中断、DMA、定时器触发。1)ADC轮询的用法我们在之前的串口

ws2165946 2021-12-08 08:23:55

基于STM32的多种printf用法 你都知道吗?

基于STM32的多种printf用法,你都知道吗?

2020-02-29 17:02:56

何谓ADCSTM32中的ADC有什么功能?

STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。

2021-06-11 17:46:16

STM32延时函数的高级用法是什么

STM32延时函数的高级用法是什么

bigbangboom 2021-12-01 06:32:24

STM32 ADC 的使用说明

前言 最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用 HAL ADC校准函数的时候遇到一个问题有点疑问,度娘

2023-06-22 10:15:00

STM32CubeProgrammer的用法是什么呢?

嗨社区,我刚刚开始使用 STM32 MCU。STM32CubeIDE 和 STM32CubeProgrammer 有什么区别?我已经安装了 STM32CubeIDE,并且能够对NUCLEO-F030R8 dev 进行编程。我用的板子。那么STM32CubeProgrammer的用法是什么呢?

getian2001 2022-12-29 08:36:29

ADC对连续外部信号进行采样的概念和用法-以M031/M032为例

ADC对连续外部信号进行采样的概念和用法-以M031/M032为例

2023-08-10 16:21:03

hc32和stm32 adc的区别

hc32和stm32 adc的区别 HC32和STM32是两种不同的微控制器系列,它们各自拥有自己的ADC模块。在本文中,我们将探讨HC32和STM32 ADC之间的区别。 先来看看HC32的ADC

2023-08-16 11:33:26

STM32ADC详解和代码设计

模拟信号转换为表示一定比例电压值的数字信号。 从STM32F207的数据手册中下图看到,STM32F207VC有3个精度为12bit的ADC控制器,有16个外部通道,而144脚的STM32

2021-02-20 14:29:47

常见传感器的模拟输出的用法

前面给大家介绍了传感器的开关输出的使用,今天给大家介绍一下常见传感器的模拟输出的用法,用到了STM32ADC(模数转换)模块,USART串口通信模块。代码就是正点原子的ADC实验的代码。

绝代双骄 2022-01-17 08:43:08

STM32ADC中断的使用注意事项和优化建议

STM32ADC中断的使用注意事项和优化建议 STM32ADC(模拟数字转换器)是STMicroelectronics开发的一款用于外部模拟信号转换为数字信号的器件。在使用STM32ADC时,合理地

2024-01-12 15:17:50

第12章-ADC采集电压和显示 基于STM32ADC—电压采集(详细讲解+HAL库)

第12章-ADC采集电压和显示 基于STM32ADC—电压采集(详细讲解+HAL库)

2024-08-21 16:31:34

详解STM32中的ADC

STM32F103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断

2023-06-26 17:09:33

STM32ADC实验

STM32f103系列有3个ADC,精度为12位,每个ADC最多有16个外部通道。其中ADC1和ADC2都有16个外部通道,ADC3一般有8个外部通道,各通道的A/D转换可以单次、连续、扫描或间断

2023-02-10 14:57:54

总结一下STM32串口的用法

STM32CubeMX_定时器中断_PWM前两节简单的总结了GPIO, EXTI, TIMER的相关用法, 本节总结一下STM32串口的用法, 依然是原理性的东西不多讲, 直接开干.先看下缩写:...

emsthe 2022-02-10 06:17:38

STM32CUBEMX具体详细的用法

所需工具1、MATLAB 2018b2、STM32硬件支持工具下载连接:STM32CUBEMX(用于配置STM32资源)下载连接:和3仅仅是在生成c语言中作为一个必须辅助的工具,具体详细的用法后续介绍。操作流程软件安装三个软件的安装都没有特殊要求,根据提示即

万物死 2021-08-11 06:53:47

STM32的多个ADC模块如何同时采样转换详细应用实例说明

STM32家族里,多数系列芯片内含2到3个ADC模块,有的甚至更多,比方G4系列可以有5个ADC模块。其中,通道数因不同的系列或型号多少不等,几个到几十个的都有。有时,我们可能需要多个ADC模块

2019-06-30 10:40:39

STM32 ADC基础内容

STM32的每个ADC有数条复用模拟输入通道,具体通道数因不同系列及型号而异。片内温度传感器、内部参考电压、VBAT还可以与内部模拟通道相连,便于测量和使用。

2021-03-12 13:51:49

STM32_ ADC单通道单次采集

STM32_ADC单通道单次采集

2020-04-08 09:57:09

基于STM32片内信号的ADC应用演示案例

很多STM32芯片里往往内置了专用的ADC通道,比方用来测量Vrefint,VBAT的分压或温度传感器的输出电压信号。

2024-01-13 13:42:12

STM32中的SAR ADC是怎么一回事?

STM32中的ADC是逐次逼近型ADC(Successive Approximation ADC),是逐个产生比较电压Vref,并逐次与输入电压分别比较,以逐渐逼近的方式进行A/D转换的。

2023-05-16 11:20:54

STM32 ADC模拟看门狗过程实现

我们在做ADC应用时,有些场合需要精确测量出待测信号的数据,有时可能并不关心ADC结果多准确,只要满足某个范围即可,这时我们就可以考虑使用STM32ADC看门狗功能了。 STM32 ADC基本上都

2023-07-13 10:28:11

如何得当使用C语言的特殊的用法

C语言有很多特殊的用法,如果这些特殊用法使用得当,会是你的代码变得更加有健壮,更加容易维护。 比如我们在使用STM32库的断言(assert),你会发现官方提供了包含__FILE__

2020-09-27 10:41:20

STM32L0 ADC使用HAL库关于校准问题的说明

最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用 HAL ADC校准函数的时候遇到一个问题有点疑问,度娘一下也没有找到解答,还是经过翻阅了一些资料才得到答案,特此来记录一下。

2023-06-15 10:57:48

Stream模块的基础用法和进阶用法

有用。在本教程中,我们将介绍 Stream 模块的基础用法和进阶用法,并提供示例。 基础用法 在本节中,我们将介绍 Stream 模块的基础用法,并提供基础示例。 从 Vec 中创建 Stream 首先

2023-09-19 15:33:09

MindSDK应用基础—ADC模块样例

MindSDK为MM32主流的微控制器,实现了一组ADC样例工程。本文通过讲解ADC模块的样例工程,介绍ADC模块的功能和用法

2023-08-17 17:16:46

STM32模数转换器 (ADC)介绍

STM32F4xx系列提供的12位ADC是逐次逼近型模数转换器。

2023-07-22 16:37:00

加载更多
相关标签