登录/注册

stm32单片机adc例子

更多

以下是一个基于STM32 HAL库的ADC单次转换示例(以PA0引脚为例):

#include "main.h"
#include "stm32f1xx_hal.h"

ADC_HandleTypeDef hadc1;

void SystemClock_Config(void);
static void MX_ADC1_Init(void);

int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_ADC1_Init();

    uint32_t adc_value = 0;
    float voltage = 0.0f;

    while (1) {
        // 启动ADC转换
        HAL_ADC_Start(&hadc1);
        // 等待转换完成(超时10ms)
        if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) {
            // 获取ADC值
            adc_value = HAL_ADC_GetValue(&hadc1);
            // 计算电压值(假设VREF=3.3V)
            voltage = (adc_value * 3.3f) / 4095;
        }
        HAL_Delay(500);
    }
}

// ADC1初始化配置
static void MX_ADC1_Init(void) {
    ADC_ChannelConfTypeDef sConfig = {0};

    hadc1.Instance = ADC1;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc1.Init.ScanConvMode = DISABLE;
    hadc1.Init.ContinuousConvMode = DISABLE;  // 单次转换模式
    hadc1.Init.NbrOfConversion = 1;
    hadc1.Init.DiscontinuousConvMode = DISABLE;
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    HAL_ADC_Init(&hadc1);

    // 配置ADC通道
    sConfig.Channel = ADC_CHANNEL_0;          // PA0对应ADC1通道0
    sConfig.Rank = ADC_REGULAR_RANK_1;
    sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);

    // 执行ADC校准
    HAL_ADCEx_Calibration_Start(&hadc1);
}

// 系统时钟配置(根据实际晶振修改)
void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

    RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
    RCC_OscInitStruct.HSEState = RCC_HSE_ON;
    RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
    RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
    RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
    RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
    HAL_RCC_OscConfig(&RCC_OscInitStruct);

    RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                                |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
    RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
    RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
    RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
    RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
    HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}

关键步骤说明:

  1. 硬件连接

    • 将模拟信号输入至PA0引脚
    • 确保VDDA/VSSA(模拟电源)正确连接
  2. CubeMX配置(可选):

    • 启用ADC1
    • 选择通道0
    • 配置为12位分辨率
    • 设置采样时间(示例使用55.5周期)
  3. 重要函数

    • HAL_ADC_Start(): 启动转换
    • HAL_ADC_PollForConversion(): 等待转换完成
    • HAL_ADC_GetValue(): 获取转换结果
  4. 电压计算

    voltage = (adc_value * 3.3f) / 4095;  // 适用于3.3V参考电压
  5. 工作模式

    • 示例使用单次转换模式,每次需要手动启动
    • 如需连续转换,设置ContinuousConvMode = ENABLE

注意事项:

  1. 实际参考电压可能因电路设计不同而变化
  2. 长距离测量时建议增加电压跟随器
  3. 高频干扰环境下建议增加滤波电容
  4. 可通过DMA实现多通道自动扫描采集

可根据具体需求修改:

stm32单片机引脚介绍及功能

STM32系列单片机是STMicroelectronics(意法半导体)推出的一款基于ARM Cortex-M内核的32位微控制器。STM32

2024-09-02 09:38:03

STM32单片机的特点和功能是什么

STM32单片机是一款基于ARM Cortex-M内核的32位闪存微控制器,由STMicroelectronics公司(意法半导体)生产。STM32

2024-01-03 15:33:59

基于STM32单片机的智能衣柜设计

基于STM32单片机的智能衣柜设计

2023-09-04 09:55:25

基于STM32单片机ADC使用库文件设计源代码

基于STM32单片机ADC使用库文件设计源代码

资料下载 木头1233 2023-04-26 15:07:19

STM32单片机ADC采集

STM32单片机ADC采集

资料下载 佚名 2021-11-18 20:36:05

AVR单片机教程--AVR单片机ADC

AVR单片机教程--AVR单片机的ADC(实用电源技术答案)-该文档为AVR单片机

资料下载 佚名 2021-09-24 15:49:48

基于STM32单片机的智能灯电路图设计

基于STM32单片机的智能灯电路图设计

资料下载 yuu_cool 2021-07-30 10:21:24

51单片机STM32单片机有哪些区别

大部分朋友可能都知道51单片机和stm32单片机也知道一般入门会先学习51单片机

资料下载 417804 2019-08-13 17:32:00

STM32单片机外部中断简介 STM32单片机外部中断的配置过程

STM32 单片机是一款高性能、低功耗的 32 位微控制器,具有强大的计算能力、灵活的外设模块以及优秀的扩展性,开发周期短、成本低。在单片机应用

2023-08-15 18:21:05

STM32单片机学习笔记(5):ADC模数转换器

利用CubMX生成基于32单片机的HAl库工程,然后编写程序在proteus上仿真验证。本项目最适合没有开发板的同学学习,零成本利用仿真软件率先入门STM32

2023-07-19 15:34:31

全方位对比STM32单片机和51单片机

萌新初入单片机领域,常会遇到STM32和51单片机两大种类,无法选择其一来提升技术,也不确定哪个

2023-03-02 14:18:19

ARM单片机STM32单片机之间有什么区别

单片机工程师在进行项目开发的时候,经常需要进行单片机选型,根据项目功能需求选择合适的单片,这就要求对每种

2023-01-07 13:59:38

CKS中科芯CKS32F030C8T6 mcu单片机 LQFP48 替换STM32F030C8T6

1970-01-01 08:00:00 至 1970-01-01 08:00:00

详解STM32单片机和51单片机的区别

分享本文,简单分析STM32与51单片机的区别与取舍之处。

2022-04-18 10:45:52

stm32单片机和51单片机区别是什么

单片机也就是单片微型计算机,和集CPU、RAM、ROM、输入输出设备、中断系统在同一个芯片上的器件。 stm32

2021-08-19 18:21:18

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