登录/注册

stm32的adc实验

stm32的adc实验

更多

好的,我们来详细讲解一下 STM32 的 ADC(模数转换器)基础实验。这个实验通常的目标是:使用 ADC 读取一个模拟输入信号(如电位器分压值),并通过某种方式(如串口或调试器)观察转换后的数字值。

这里我们假设:

  1. 使用 STM32CubeIDE 开发环境。
  2. 使用 STM32 HAL 库 进行开发。
  3. 目标是一个常见的开发板(如 STM32F1/F4 系列),并使用其板载电位器(如果可用)或自己连接一个电位器到 ADC 引脚。
  4. 使用 单通道、轮询模式 进行单次转换。这是最简单的方式。

实验步骤详解

1. 硬件准备

2. STM32CubeIDE 工程配置 (以 STM32F103C8T6 PA0 为例)

3. 编写用户代码 (main.c 示例)

在生成的代码中,我们需要在 main.c 文件中添加逻辑:

/* USER CODE BEGIN Includes */
#include <stdio.h> // 如果使用 printf 需要包含
/* USER CODE END Includes */

/* USER CODE BEGIN PV */
// 定义全局变量存放 ADC 值和电压值
uint32_t adc_value = 0;
float voltage = 0.0f;
/* USER CODE END PV */

/* USER CODE BEGIN 0 */
// 如果需要使用 printf 重定向到串口 (可选)
#ifdef __GNUC__
int __io_putchar(int ch) {
    HAL_UART_Transmit(&huart1, (uint8_t *)&ch, 1, HAL_MAX_DELAY); // 假设使用 huart1
    return ch;
}
#endif
/* USER CODE END 0 */

int main(void) {
    /* USER CODE BEGIN 1 */
    /* USER CODE END 1 */
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_ADC1_Init();
    MX_USART1_UART_Init(); // 如果使用了串口,确保初始化

    /* USER CODE BEGIN 2 */
    // 校准 ADC (推荐,提高精度)
    HAL_ADCEx_Calibration_Start(&hadc1); // hadc1 是 CubeMX 生成的 ADC 句柄
    /* USER CODE END 2 */

    while (1) {
        /* USER CODE BEGIN 3 */

        // 启动 ADC 转换 (单次转换)
        HAL_ADC_Start(&hadc1);

        // 轮询等待转换完成
        if (HAL_ADC_PollForConversion(&hadc1, 10) == HAL_OK) { // 超时 10ms
            // 读取转换结果 (12位右对齐,范围 0-4095)
            adc_value = HAL_ADC_GetValue(&hadc1);

            // 计算实际电压值 (假设 Vref+ = 3.3V, Vref- = 0V)
            voltage = (float)adc_value * 3.3f / 4095.0f; // 12位分辨率最大值 2^12 - 1 = 4095

            // 方式1: 通过调试器查看变量 adc_value 和 voltage (在线调试时)
            // 方式2: 通过串口打印 (需要重定向 printf)
            printf("ADC Value: %lu, Voltage: %.2f V\r\n", adc_value, voltage);

            // 方式3: 翻转一个LED灯表示ADC在运行 (可选)
            // HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); // 需配置LED引脚
        }

        // 简单延时 (HAL_Delay 会阻塞,实际项目考虑用定时器)
        HAL_Delay(500); // 每 500ms 采样一次
    }
    /* USER CODE END 3 */
}

4. 代码关键点解释

  1. 初始化: MX_ADC1_Init() 由 CubeMX 自动生成,配置了 ADC 的基本参数、通道和采样时间。
  2. 校准: HAL_ADCEx_Calibration_Start() 是推荐的步骤,用于补偿 ADC 模块内部的误差,提高转换精度。
  3. 启动转换: HAL_ADC_Start(&hadc1) 启动一次 ADC 转换。
  4. 等待转换完成: HAL_ADC_PollForConversion(&hadc1, timeout) 阻塞等待直到转换完成或超时。轮询模式简单但占用 CPU。
  5. 读取结果: HAL_ADC_GetValue(&hadc1) 读取转换后的数字值(12位模式下:0 - 4095)。
  6. 计算电压: 电压 = (ADC值 / 4095) * Vref。默认 Vref 通常等于芯片的 VDDA 引脚电压(大多数开发板是 3.3V)。重要: 确保 VDDA 电压稳定准确是获得精确电压值的关键。
  7. 输出结果:
    • 调试器查看: 在 STM32CubeIDE 的 Debug 模式下,添加 adc_valuevoltageExpressionsLive Expressions 窗口实时查看。
    • 串口打印: 需要实现 printf 重定向(示例中提供了 __io_putchar 的简单实现),并通过串口助手(如 PuTTY, Tera Term)查看打印信息。
    • LED: 简单指示程序在运行。

5. 编译、下载与调试

  1. 编译: 点击 STM32CubeIDE 的锤子图标或 Project -> Build All
  2. 下载: 确保 ST-Link 连接好,点击 Run -> Run 或小虫子图标旁边的下拉箭头选择 Debug As -> STM32 MCU C/C++ Application
  3. 调试/运行:
    • 进入 Debug 视图。
    • 可以在 while(1) 循环内设置断点观察变量。
    • 或者直接在 Live Expressions 窗口添加 adc_valuevoltage,全速运行 (Resume F8) 时也能实时刷新查看数值。
    • 如果使用了串口,打开串口助手,设置正确的 COM 口、波特率(与 huart1 初始化的波特率一致,如 115200)查看打印信息。

6. 观察结果与验证

7. 常见问题及解决

进阶方向

这个基础实验是理解 STM32 ADC 功能的起点。成功完成它后,你就可以根据具体应用需求探索更高级的功能了。祝你实验顺利!

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

本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL库的ADC采样函数为基础进行教学,通过各式

2024-10-28 10:51:11

hc32和stm32 adc的区别

hc32和stm32 adc的区别 HC32和STM32是两种不同的微控制器系列,它们各自拥有自己的

2023-08-16 11:33:26

STM32 ADC 的使用说明

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

2023-06-22 10:15:00

基于STM32上的5个ADC程序

基于STM32上的5个ADC程序(单兵电源技术需求)-基于STM32上的5个ADC

资料下载 王利祥 2021-09-27 12:37:41

STM32ADC学习历程

STM32的ADC学习历程(电源技术期刊影响因子)- STM32的ADC

资料下载 王越建 2021-09-27 12:32:55

STM32ADC驱动程序

STM32的ADC驱动程序(电源技术被踢出核心)-  STM32的ADC

资料下载 刘满贵 2021-09-23 13:43:22

STM32ADC代码例程

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

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

STM32F4 ADC模数转换实验例程

STM32F4 ADC模数转换实验例程(深圳市普德新星电源技术有限公司)-STM32

资料下载 佚名 2021-09-16 10:21:50

STM32ADC实验

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

2023-02-10 14:57:54

STM32F103双重ADC同步规则模式采集实验

  双重 ADC 同步规则模式采集实验与多路LCD 波形示波器制作显示,本文展示了STM32 AD 双重

2022-02-24 10:47:31

STM32F4的ADC简介

目录一:STM32F4的ADC简介1.1 ADC简介(不看也行)1.2 ADC

2022-01-20 08:17:24

求大神分享一个不错的STM32 ADC转换实验

求大神分享一个不错的STM32 ADC转换实验

2021-09-23 07:54:57

STM32F103VET6——ADC单通道中断读取实验讲解 精选资料推荐

STM32F103VET6——ADC单通道中断读取实验讲解参考 《STM32

2021-08-04 08:09:32

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

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

2021-06-11 17:46:16

为什么STM32F103中的ADC实验的最大转换速率为1微妙?

为何STM32F103中的ADC实验的最大转换速率为1微妙

2019-08-20 23:43:37
7天热门专题 换一换
相关标签