登录/注册

stm32 打印adc值

更多

在STM32上打印ADC值需要配置ADC采集和串口通信(如USART),以下是基于HAL库的通用步骤:


1. 硬件连接


2. 代码实现(基于STM32CubeMX生成的HAL库)

(1) ADC配置

// 初始化ADC
ADC_HandleTypeDef hadc1;

void ADC_Init(void) {
  hadc1.Instance = ADC1;
  hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;
  hadc1.Init.ContinuousConvMode = DISABLE;       // 单次转换模式
  hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;    // 数据右对齐
  hadc1.Init.NbrOfConversion = 1;                // 1个转换通道
  HAL_ADC_Init(&hadc1);

  // 配置ADC通道(以PA0为例,对应ADC1通道0)
  ADC_ChannelConfTypeDef sConfig = {0};
  sConfig.Channel = ADC_CHANNEL_0;
  sConfig.Rank = ADC_REGULAR_RANK_1;
  sConfig.SamplingTime = ADC_SAMPLETIME_239CYCLES_5; // 采样时间
  HAL_ADC_ConfigChannel(&hadc1, &sConfig);

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

(2) 串口配置

// 初始化USART1
UART_HandleTypeDef huart1;

void USART1_Init(void) {
  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  HAL_UART_Init(&huart1);
}

// 重定向printf到串口
#include <stdio.h>
int __io_putchar(int ch) {
  HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
  return ch;
}

(3) 主函数中读取并打印ADC值

int main(void) {
  HAL_Init();
  SystemClock_Config();  // 由CubeMX生成的时钟配置
  ADC_Init();
  USART1_Init();

  while (1) {
    // 启动ADC转换
    HAL_ADC_Start(&hadc1);
    // 等待转换完成
    if (HAL_ADC_PollForConversion(&hadc1, 100) == HAL_OK) {
      uint16_t adc_value = HAL_ADC_GetValue(&hadc1);
      float voltage = (adc_value * 3.3) / 4095;  // 计算电压(假设参考电压3.3V)

      // 通过串口打印
      printf("ADC原始值: %d, 电压: %.2f V\n", adc_value, voltage);
    }
    HAL_Delay(500);  // 每500ms采集一次
  }
}

3. 关键步骤说明

  1. ADC校准:确保调用 HAL_ADCEx_Calibration_Start() 校准ADC,提高精度。
  2. 串口重定向:通过 __io_putcharprintf 输出重定向到串口。
  3. 电压计算:ADC为12位分辨率,最大值4095对应参考电压(通常为3.3V)。

4. 验证方法

  1. 使用串口助手(如PuTTY、XShell)打开对应串口,波特率设为115200。
  2. 观察输出结果,调节输入电压(如用可调电阻)验证ADC值变化。

注意:实际开发中需根据具体型号调整引脚和时钟配置(例如STM32F103与STM32F407的差异)。建议使用STM32CubeMX生成初始化代码,再补充核心逻辑。

ADS131M03打印输出的电压与实际输入电压对不上是怎么回事?

你好,我想咨询下:实际输入电压与打印输出电压不一致,我环境是这样的:ADC芯片位ADS131M03,MCU为STM32103 初始化: SP

2024-11-14 08:34:29

AN219755打印出来的adc采样不正常是怎么回事?

我使用了文档AN219755里的代码,然后打印出来的adc采样值不正常如下图所示 请教一下这个问题如何解决

2024-02-02 07:46:59

STM32CubeMx入门教程(5):ADC应用

导语“在本次教程中我们使用指南者开发板的ADC功能,实现ADC电压采样转换。本项目在USART项目(参考USART章节)的基础上配置ADC,通过

2023-07-11 15:25:19

STM32单片机基础21——使用ADC读取电压

title: 【STM32Cube-21】使用ADC读取电压值tags: STM32

资料下载 无人岛 2021-11-19 09:51:03

基于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

STM32f103c8 ADC错误,恒定错误和不稳定的输出怎么解决?

屏幕截图)。在提供 0 - 3.3 伏之间的任何电压值后,输出在 0 到 3.3 伏之间有争议地变化。我检查了输入参考电压,它是 3.3 伏。你能建议我如何解决这个问题吗?我打印了函数 HAL_

2022-12-29 07:32:11

关于ADC与DAC串口打印的问题

请问怎么实现ADC采集DAC引脚处的电压并串口打印我已经实现ADC采集引脚处的电压串口

2022-08-23 10:23:21

怎样去测试STM32单片机ADC采样速率问题

突然想测试一下STM32单片机ADC采样速率问题,按照常规方法,可以通过ADC采样,然后将采样

2022-02-22 06:28:04

使用printf打印一下ADC

今天又遇见了一个神之BUG本来是在今天配置ADC 配置ADC好了之后想通过仿真来验证是否正确结果绝了 不管我们怎么检查这个ADC的

2021-12-17 06:31:39

如何利用STM32F1的ADC1通道1来采样外部电压并通过串口调试助手打印出来?

如何利用STM32F1的ADC1通道1来采样外部电压值并通过串口调试助手打印

2021-12-14 07:18:57

如何将ADC赋值给1个数组?

用PC端串口软件读取ADC的转换值,发现如果将ADC结果寄存器(ADC_

2021-06-12 11:19:52

STM32ADC详解和代码设计

模拟信号转换为表示一定比例电压值的数字信号。 从STM32F207的数据手册中下图看到,STM32F207VC有3个精度为12bit的

2021-02-20 14:29:47

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