登录/注册

stm32adc采样 代码

更多

以下是一个基于STM32 HAL库的ADC单通道采样代码示例(以单次转换模式为例):

#include "stm32f1xx_hal.h"

ADC_HandleTypeDef hadc;

void ADC_Init(void)
{
    // 1. 使能时钟
    __HAL_RCC_ADC1_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();

    // 2. 配置ADC引脚(以PA1为例)
    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;  // 模拟模式
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

    // 3. 配置ADC参数
    hadc.Instance = ADC1;
    hadc.Init.DataAlign = ADC_DATAALIGN_RIGHT;  // 数据右对齐
    hadc.Init.ScanConvMode = DISABLE;           // 单通道模式
    hadc.Init.ContinuousConvMode = DISABLE;     // 单次转换模式
    hadc.Init.NbrOfConversion = 1;              // 1个转换
    hadc.Init.DiscontinuousConvMode = DISABLE;   // 禁用间断模式
    hadc.Init.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
    HAL_ADC_Init(&hadc);

    // 4. 配置ADC通道(通道1对应PA1)
    ADC_ChannelConfTypeDef sConfig = {0};
    sConfig.Channel = ADC_CHANNEL_1;      // 选择通道
    sConfig.Rank = ADC_REGULAR_RANK_1;    // 规则组第1个转换
    sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 采样时间
    HAL_ADC_ConfigChannel(&hadc, &sConfig);

    // 5. ADC校准
    HAL_ADCEx_Calibration_Init(&hadc);
}

uint16_t ADC_Read(void)
{
    HAL_ADC_Start(&hadc);                     // 启动ADC转换
    HAL_ADC_PollForConversion(&hadc, 100);     // 等待转换完成
    return HAL_ADC_GetValue(&hadc);           // 返回12位转换结果
}

// 主函数中调用示例
int main(void)
{
    HAL_Init();
    ADC_Init();

    while(1)
    {
        uint16_t adc_value = ADC_Read();
        // 处理采样值...
        HAL_Delay(100);
    }
}

多通道连续采样(使用DMA)的补充代码:

// 全局变量
uint16_t adc_buffer[2];  // 存储两个通道的转换结果

void ADC_DMA_Init(void)
{
    // 在ADC_Init基础上修改:
    hadc.Init.ScanConvMode = ENABLE;        // 启用扫描模式
    hadc.Init.ContinuousConvMode = ENABLE;  // 连续转换模式
    hadc.Init.NbrOfConversion = 2;         // 2个转换

    // 添加DMA配置
    __HAL_RCC_DMA1_CLK_ENABLE();
    hadc.DMA_Handle = &hdma_adc1;
    hdma_adc1.Instance = DMA1_Channel1;
    hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_adc1.Init.MemInc = DMA_MINC_ENABLE;
    hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
    hdma_adc1.Init.Mode = DMA_CIRCULAR;  // 循环模式
    HAL_DMA_Init(&hdma_adc1);

    // 配置两个通道
    ADC_ChannelConfTypeDef sConfig;
    // 通道1配置
    sConfig.Channel = ADC_CHANNEL_1;
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
    HAL_ADC_ConfigChannel(&hadc, &sConfig);

    // 通道2配置
    sConfig.Channel = ADC_CHANNEL_2;
    sConfig.Rank = ADC_REGULAR_RANK_2;
    HAL_ADC_ConfigChannel(&hadc, &sConfig);

    // 启动带DMA的连续转换
    HAL_ADC_Start_DMA(&hadc, (uint32_t*)adc_buffer, 2);
}

关键点说明:

  1. 采样时间:根据信号源阻抗调整SamplingTime,高阻抗信号需要更长的采样时间
  2. 参考电压:确保VREF+和VREF-连接稳定(通常VREF+接3.3V,VREF-接GND)
  3. 校准:每次上电后应执行HAL_ADCEx_Calibration_Start()提高精度
  4. DMA模式:连续采样推荐使用DMA+CIRCULAR模式降低CPU占用
  5. 电压计算:实际电压值 = (ADC值 * VREF) / 4095(12位ADC时)

常见问题处理:

建议根据具体型号参考《参考手册》中"ADC"章节的寄存器说明,以及CubeMX生成的配置代码。

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

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

2024-10-28 10:51:11

怎样用stm32ADC检测输入5V的电压

用stm32ADC采样测量0-5V的电压,只能实现0-3.3V的测量,老师只给了一块开发板,没有别的外设。

2024-06-19 00:40:29

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

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

2024-01-12 15:17:50

STM32ADC转换

ADC模数转换一、概述ADC翻译过来是模数转换,意思就是将外部世界采集到的模拟量的数据信息通过ADC变为计算机可以识别的数字信号。

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

STM32 ADC采样技术

STM32 ADC 过采样技术

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

STM32ADC代码例程

STM32的ADC代码例程(普德新星电源技术有限公司怎么样)- STM32

资料下载 vinww特烦恼 2021-09-23 09:53:19

STM32多个ADC模块同时采样转换的应用示例

STM32多个ADC模块同时采样转换的应用示例(深圳市普德新星电源技术有限公司怎么样)-本文重点介绍利用含有3个

资料下载 石玉兰 2021-08-04 18:47:30

STM32F30x 的ADC 采样的傅立叶变换

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

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

怎么查看当前STM32ADC采样频率?

STM32ADC的采样频率怎么看呢

2023-10-15 11:02:10

STM32的12位ADC采样实现16位分辨率

过采样技术是一种以牺牲采样速度来提高ADC分辨率的技术。部分STM32单

2023-10-12 10:19:03

使用STM32ADC看门狗测量出待测信号

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

2023-07-17 10:31:16

stm32ADC求助

萌新请教下stm32adc采样如果要采集音频(原接口接喇叭sp+和sp-现在想用单片机adc采集)是用单通道还是双通道

2022-03-06 21:45:00

ADC的作用是什么

是什么?回答:将连续变量的模拟信号转换为离散的数字信号,并将数据存储在数据寄存器中3、stm32ADC简介:STM32 拥有 1~3 个 ADC

2021-12-06 07:13:35

STM32 ADC框图讲解

目录01、ADC简介02、STM32的ADC外设03、STM32ADC框

2021-08-19 08:59:42

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

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

2019-06-30 10:40:39

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