登录/注册

STM32L151 ADC程序

STM32L151 ADC程序

更多

以下是一个基于STM32L151微控制器的ADC基本配置示例(使用HAL库),以中文说明:


1. ADC初始化配置

#include "stm32l1xx_hal.h"

ADC_HandleTypeDef hadc;

void ADC_Init(void)
{
  // 1. 配置ADC时钟
  __HAL_RCC_ADC1_CLK_ENABLE(); // 使能ADC1时钟

  // 2. 配置ADC GPIO(以通道1为例,PA1引脚)
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  GPIO_InitStruct.Pin = GPIO_PIN_1;
  GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; // 模拟模式
  GPIO_InitStruct.Pull = GPIO_NOPULL;      // 无上下拉
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  // 3. 配置ADC参数
  hadc.Instance = ADC1;
  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.ExternalTrigConv = ADC_SOFTWARE_START; // 软件触发
  hadc.Init.NbrOfConversion = 1;              // 1个转换通道
  HAL_ADC_Init(&hadc);

  // 4. 配置ADC通道
  ADC_ChannelConfTypeDef sConfig = {0};
  sConfig.Channel = ADC_CHANNEL_1;      // 通道1对应PA1
  sConfig.Rank = ADC_RANK_1;            // 转换序列中的第一个
  sConfig.SamplingTime = ADC_SAMPLETIME_384CYCLES; // 采样时间384周期
  HAL_ADC_ConfigChannel(&hadc, &sConfig);

  // 5. ADC校准
  HAL_ADCEx_Calibration_Start(&hadc); // 执行校准
}

2. 读取ADC值函数

uint16_t Read_ADC_Value(void)
{
  HAL_ADC_Start(&hadc);                     // 启动ADC转换
  HAL_ADC_PollForConversion(&hadc, 100);    // 等待转换完成(超时100ms)
  if (HAL_ADC_GetState(&hadc) == HAL_ADC_STATE_EOC)
  {
    return HAL_ADC_GetValue(&hadc); // 返回12位转换结果
  }
  return 0; // 异常时返回0
}

3. 主函数调用示例

int main(void)
{
  HAL_Init();
  SystemClock_Config(); // 确保系统时钟已配置
  ADC_Init();

  while (1)
  {
    uint16_t adc_value = Read_ADC_Value();
    float voltage = (adc_value * 3.3) / 4095; // 计算实际电压(假设参考电压3.3V)
    HAL_Delay(500);
  }
}

关键点说明:

  1. 时钟配置:务必通过__HAL_RCC_ADC1_CLK_ENABLE()启用ADC时钟。
  2. 采样时间:根据信号源阻抗调整ADC_SAMPLETIME(高阻抗信号需要更长时间)。
  3. 参考电压:STM32L151的VDDA通常连接3.3V,可通过VREFINT校准提高精度。
  4. 低功耗优化:在低功耗场景下,可关闭ADC并动态调整采样时间。

若需多通道扫描或DMA传输,需配置ScanConvMode = ENABLE并设置多个通道的Rank顺序。

STM32L151/152系列超低功耗MCU:特性、应用与设计要点

STM32L151/152系列超低功耗MCU:特性、应用与设计要点 在电子设备不断追求低功耗、高性能的今天,STM32L151x6/8/B和STM32L

2026-04-17 14:45:18

STM32L151在STOP模式下如何冻结独立看门狗?

STM32L151在STOP模式下如何冻结独立看门狗。使用CubeMX生成的程序。

2024-03-13 07:04:19

STM32L151利用Jlink的sw模式下载程序时报内部错误怎么解决?

STM32L151利用Jlink的sw模式下载程序时报内部错误,哪位大神能给解答一下吗?

2023-10-31 06:59:38

STM32L151ADC时钟配置爬坑记

目录一、前言二、挖坑过程三、填坑记录一、前言首先说明一下,我所指的“爬坑”并不是说STM32L151的时钟有问题哈,STM32L151的时钟肯定是没问题的,只是跟

资料下载 佚名 2021-12-27 18:55:58

STM32L151 SPI2调试笔记

STM32L151 SPI2调试笔记项目中SPI1已使用,另一个芯片SPI通信方式,不得不采用SPI2通信,前面使用的是正点原子的代码,但是发现调试发现程序会卡死在发送这里u8

资料下载 百灵千岛酱 2021-12-22 19:25:09

STM32L151 FLASH_ProgramHalfPage写入失败,程序卡死并导致STli

STM32L151CBT6A Flash半页写入程序卡死并导致STli

资料下载 123 2021-12-09 09:51:11

stm32L151低功耗心得

stm32L151低功耗心得前言STM32低功耗的三种模式低功耗的硬件设计前言最近结束了一个STM32L151的项目,项目基本条件就是电池供电、

资料下载 佚名 2021-12-04 11:36:13

stm32L151低功耗学习——Alarm闹钟周期唤醒(10s/10min/10h)

一、最近在搞stm32L151C8T6的低功耗模式。项目场景:提示:这里简述项目相关背景:LoRa低功耗,用到stm32L151C8T6+sx1278,SPI通信。本文主要讲述

资料下载 张伟 2021-11-26 20:21:09

如何为STM32L151创建LL_SPI_SetStandard?

大家好,目前,STM32L151 的 Stm32CubeMx 生成器在 spi.c 中创建了一个“LL_SPI_SetStandard”调用,该调用不适用于该设备。这似乎是这里的错误。

2022-12-13 08:35:58

STM32L151ADC时钟配置有哪些注意事项?

STM32L151的ADC时钟配置有哪些注意事项?

2022-02-21 07:41:12

请教大神如何去实现STM32L151的usart2串口程序

请教大神如何去实现STM32L151的usart2串口程序呢?

2021-12-06 06:28:26

怎样去写一个stm32l151芯片串口间通信的程序

怎样去写一个stm32l151芯片串口间通信的程序呢?

2021-12-06 06:16:49

STM32/STM32L151 RTC定时唤醒STOP模式需要注意什么?

STM32/STM32L151 RTC定时唤醒STOP模式需要注意什么?

2021-11-23 06:10:27

STM32L151单片机写ADC发现的问题 精选资料分享

之前玩过F1和F4的板子,这段时间,接个项目需要用低功耗,所以就整了STM32L151单片机,然后今天在写ADC的时候,发现了一个问题,就是STM32L151

2021-08-13 08:22:37

STM32L151的开发?

各位大神谁做过STM32L151的开发? 请教一下,谢谢

2020-06-13 09:03:20
7天热门专题 换一换
相关标签