登录/注册

stm32 ADC初始化

更多

以下是STM32 ADC初始化的基本步骤及示例代码(以STM32 HAL库为例):


ADC初始化步骤

  1. 启用时钟

    • 开启ADC和对应GPIO端口的时钟。
  2. 配置GPIO

    • 将模拟输入引脚设置为模拟模式(Analog Mode)。
  3. 配置ADC参数

    • 使用ADC_HandleTypeDef结构体设置分辨率、对齐方式、扫描模式等。
  4. 配置ADC通道

    • 设置转换通道的采样时间和转换顺序(规则组或注入组)。
  5. 中断配置(可选)

    • 如需中断读取数据,启用ADC中断并配置NVIC。
  6. 校准ADC

    • 执行ADC校准以提高精度。
  7. 启动ADC

    • 使能ADC并开始转换。

代码示例(基于HAL库)

// 1. 定义ADC句柄
ADC_HandleTypeDef hadc1;

void ADC_Init(void) {
  // 2. 启用时钟
  __HAL_RCC_ADC1_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE(); // 假设ADC通道在GPIOA

  // 3. 配置GPIO为模拟输入
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_0; // 例如PA0对应ADC1通道0
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // 4. 配置ADC参数
  hadc1.Instance = ADC1;
  hadc1.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
  hadc1.Init.ScanConvMode = DISABLE;          // 单通道模式(非扫描)
  hadc1.Init.ContinuousConvMode = ENABLE;     // 连续转换模式
  hadc1.Init.DiscontinuousConvMode = DISABLE;
  hadc1.Init.NbrOfDiscConversion = 0;
  hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
  HAL_ADC_Init(&hadc1);

  // 5. 配置ADC通道的采样时间
  ADC_ChannelConfTypeDef sConfig = {0};
  sConfig.Channel = ADC_CHANNEL_0;       // 通道0(对应PA0)
  sConfig.Rank = ADC_REGULAR_RANK_1;     // 规则组第1个转换
  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; // 采样周期
  HAL_ADC_ConfigChannel(&hadc1, &sConfig);

  // 6. 校准ADC
  HAL_ADCEx_Calibration_Start(&hadc1);

  // 7. 启动ADC
  HAL_ADC_Start(&hadc1);
}

// 读取ADC值(轮询方式)
uint32_t ADC_Read(void) {
  HAL_ADC_PollForConversion(&hadc1, 10); // 等待转换完成
  return HAL_ADC_GetValue(&hadc1);       // 返回12位ADC值
}

关键参数说明


注意事项

  1. 确保GPIO已正确配置为模拟输入(非浮空或复用模式)。
  2. 校准(HAL_ADCEx_Calibration_Start)是必需的,否则精度可能不达标。
  3. 若使用DMA传输多通道数据,需额外配置DMA控制器。

根据具体型号(如STM32F1/F4/H7),部分参数可能需调整,请参考对应型号的《参考手册》。

GraniStudio:初始化例程

1.文件运行 导入工程 双击运行桌面GraniStudio.exe。 通过引导界面导入初始化例程,点击导入按钮。 打开初始化例程所在路径,选中初始化

2025-08-22 16:45:41

STM32F407 MCU使用SD NAND 不断电初始化失效解决方案

STM32F407微控制器单元(MCU)与SD NAND的结合提供了强大的存储解决方案。然而,不断电初始化失效问题可能会导致系统稳定性和数据完整性受损。我们将

2024-12-11 10:51:58

使用STM32CubeMX生成初始化代码

我使用STM32CubeMX生成初始化代码,使用LL库,这里只介绍跟i2c相关的部分,其他必要的初始化需要自己完成。芯片使用

2023-03-22 15:26:14

STM32CubeMX用于STM32配置和初始化C代码生成

电子发烧友网站提供《STM32CubeMX用于STM32配置和初始化C代码生成.pdf》资料免费下载

资料下载 jf_50251555 2025-02-26 17:32:14

ADC初始化测定方法

测试ADC初始化时间的方法

资料下载 BRADYYANG 2022-12-05 14:45:00

DB2163_STM32配置和初始化C代码生成

DB2163_STM32配置和初始化C代码生成

资料下载 吴藩 2022-11-23 20:29:41

STM32执行代码初始化卡住,或者上电卡住,或者复位卡住,导致代码不执行

STM32的板子上电或者复位,接有显示屏或者LED指示灯的都会卡住解决:1、检查自己的代码是否有中断,有中断的话,其初始化放在其他硬件初始化之后

资料下载 佚名 2021-12-09 09:21:14

在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决

本文档的主要内容详细介绍的是在51平台下初始化文件的引入导致全局变量无法初始化的问题如何解决。

资料下载 鼠爱米 2019-08-20 17:31:00

STM32CubeMX外设在哪里初始化

。生成了 MX init 函数,但在示例项目 STM32CubeMX 中配置为不生成函数调用。我找到了初始化ADC和GPIO引脚的地方,但是,我

2023-01-11 06:28:16

RT-Thread自动初始化详解

我们知道,在写裸机程序时,当我们完成硬件初始化后,就需要在主函数中进行调用。当我们使用RT-Thread后,完全不需要这样做了,我们可以将硬件等自动初始化。 RT-Thread 自动

2022-06-25 21:38:01

如何对STM32ADC转换进行初始化

什么是ADC模数变换器?如何对STM32的ADC转换进行初始化呢?

2021-11-15 07:24:41

ADC初始化

ADC的初始化:#define ADCIO1_IN_CHANNELLL_ADC_CHANNEL_5#define ADCIO2_IN_CHANN

2021-08-17 07:25:58

初始化ADC的通道

可以初始化ADC的通道

2021-08-12 08:12:19

C++之初始化列表学习的总结

类中可以使用初始化列表对成员进行初始化。

2020-12-24 17:39:54

UART初始化ADC读取

嗨,我想知道的指令集,可用于MPLAB X初始化UART和ADC读取。PIC16F88有什么例子吗?我刚刚从下面开始,但是我需要初始化、延迟和发

2020-03-13 07:19:13
7天热门专题 换一换
相关标签