登录/注册

stm32 hal adc 采样

更多

在STM32中使用HAL库进行ADC采样的基本步骤如下:


1. ADC初始化

ADC_HandleTypeDef hadc;

void ADC_Init(void) {
  hadc.Instance = ADC1; // 选择ADC实例(如ADC1, ADC2等)
  hadc.Init.Resolution = ADC_RESOLUTION_12B; // 12位分辨率
  hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT; // 数据右对齐
  hadc.Init.ScanConvMode = DISABLE; // 单通道模式(禁用扫描)
  hadc.Init.ContinuousConvMode = DISABLE; // 单次转换模式
  hadc.Init.DiscontinuousConvMode = DISABLE; // 禁用间断模式
  hadc.Init.NbrOfConversion = 1; // 转换通道数
  hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发启动
  HAL_ADC_Init(&hadc);
}

2. 配置ADC通道

void ADC_ConfigChannel(void) {
  ADC_ChannelConfTypeDef sConfig = {0};
  sConfig.Channel = ADC_CHANNEL_0; // 选择ADC通道(如通道0)
  sConfig.Rank = ADC_REGULAR_RANK_1; // 转换顺序(第1个转换)
  sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES; // 采样时间(3个时钟周期)
  HAL_ADC_ConfigChannel(&hadc, &sConfig);
}

3. 校准ADC

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

4. 启动ADC并读取数据

uint32_t adc_value = 0;

// 启动ADC转换
HAL_ADC_Start(&hadc);

// 等待转换完成(阻塞模式)
if (HAL_ADC_PollForConversion(&hadc, 100) == HAL_OK) {
  adc_value = HAL_ADC_GetValue(&hadc); // 读取转换结果
}

HAL_ADC_Stop(&hadc); // 停止ADC

5. 常用模式扩展

连续转换模式

hadc.Init.ContinuousConvMode = ENABLE; // 启用连续转换
// 启动后ADC会自动连续采样,需通过中断或DMA读取数据

多通道扫描模式

hadc.Init.ScanConvMode = ENABLE; // 启用扫描模式
hadc.Init.NbrOfConversion = 2;   // 设置转换通道数
// 配置多个通道的Rank和采样时间

DMA传输

// 初始化DMA,并在ADC配置中关联DMA句柄
hadc.DMA_Handle = &hdma_adc;
HAL_ADC_Start_DMA(&hadc, (uint32_t*)adc_buffer, buffer_size);

注意事项:

  1. 时钟配置:确保ADC时钟(通过RCC配置)不超过数据手册中的最大频率。
  2. 参考电压:正确连接VREF+和VREF-(若使用外部参考)。
  3. 引脚配置:将ADC通道对应的GPIO设为模拟输入模式:
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  4. 中断处理:若使用中断或DMA,需在HAL库中启用并实现回调函数。

根据具体需求调整采样时间、分辨率等参数,详细内容可参考STM32CubeMX生成的代码或HAL库手册。

STM32ADC采样及各式滤波算法实现

本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以

2024-10-28 10:51:11

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

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

2024-08-21 16:31:34

STM32L051C8T6 HAL进入STOP模式RTC唤醒后,ADC采样值不对怎么解决?

STM32L051C8T6HAL 进入STOP模式RTC唤醒后,ADC采样值不对! 程序如果不进入STOP模式,

2024-03-25 07:35:33

STM32ADC多通道采样

基于STM32Cube的ADC多通道采样STMCube+MDK用hal库

资料下载 佚名 2021-12-24 19:29:29

STM32 ADC采样技术

STM32 ADC 过采样技术

资料下载 佚名 2021-12-08 16:21:06

stm32 HAL库使用定时器触发adc采样

我的目的是使用定时器触发adc采样,采样频率是500khz,在DMA传输完500个数据之后,求这500个数据的平均值,通过串口发送出去,相当于串

资料下载 佚名 2021-11-30 11:21:05

STM32 ADC 采样值不准确或偏小

越大越准确。采样周期太大会影响采样时间,计算公式:采样时间(us) = (12.5+SamplingTime ) /

资料下载 hxjq 2021-11-25 09:21:02

STM32F30x 的ADC 采样的傅立叶变换

STM32F30x 的ADC 采样的傅立叶变换(理士国际电源技术有限公司)-本文目的是演示如何使用

资料下载 鼠爱米 2021-08-04 17:47:45

STM32 ADC 的使用说明

前言 最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用

2023-06-22 10:15:00

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

最近是有一个产品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代码,本来以为简简单单,但是在调用

2023-06-15 10:57:48

STM32 ADC采样值不准确或偏小的原因

越大越准确。采样周期太大会影响采样时间,计算公式:采样时间(us) = (12.5+SamplingTime ) /

2021-12-08 06:35:07

STM32H7的ADC基础知识和HAL库API

第44章 STM32H7的ADC基础知识和HAL库API本章节为大家讲解ADC

2021-08-20 07:55:18

stm32 HAL库是如何使用定时器触发adc采样

我的目的是使用定时器触发adc采样,采样频率是500khz,在DMA传输完500个数据之后,求这500个数据的平均值,通过串口发送出去,相当于串

2021-08-13 07:49:11

基于STM32Cube的ADC多通道采样

基于STM32Cube的ADC多通道采样STMCube+MDK用hal库

2021-08-13 06:27:29

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

同时工作,比方3个ADC模块同时采样转换。这时如果芯片内含有3个ADC模块,并支持同时

2019-06-30 10:40:39

7天热门专题 换一换
相关标签