STM32F1x HAL库学习笔记(10)ADC 配置

本文开发环境:

  • MCU型号:STM32F103C8T6
  • IDE环境: MDK 5.27
  • 代码生成工具:STM32CubeMx 5.4.0
  • HAL库版本:STM32Cube_FW_F1_V1.8.0

本文内容:

  1. STM32CubeMx 配置 ADC
  2. 示例工程

一、 ADC 简介

ADC(analogue-to-digital conversion)指的是将模拟量转换为数字量的过程,在 MCU 中有广泛的应用,通常用以测量电压的值,比如,测量热敏或光敏的电阻两端的电压,就可以获取当前温度或光线的强度。

二、使用 STM32CubeMx 配置 ADC

使用 STM32CubeMx(以下简称 Mx) 可以非常方便的配置外设,一般有以下几个步骤:

  • 选择目标单片机
  • 选择系统时钟源,配置系统时钟树
  • 打开调试 IO 口
  • 配置外设
  • 生成指定 IDE 的工程

由于除配置外设以外为通用配置,不再赘述。

三、ADC 的配置

在这里插入图片描述

四、程序设计

int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */
  

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_ADC1_Init();
  /* USER CODE BEGIN 2 */

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
     // 启动ADC转换
        HAL_ADC_Start(&hadc1);
        // 等待转换完成,第二个参数表示超时时间,单位ms
        HAL_ADC_PollForConversion(&hadc1, 100);
        // 为换取ADC状态
        int adc_value = HAL_ADC_GetValue(&hadc1);
        // 采取的右对齐除以2的12次方,参考电压为3.3V
        float  voltage = (float)adc_value / 4096 * 3.3;
        printf("voltage = %f\r\n", voltage);
        HAL_Delay(1000);
  }
  /* USER CODE END 3 */
}
  • HAL_ADC_Start() :开启一次ADC转换
  • HAL_ADC_PollForConversion():等待转换完成
  • HAL_ADC_GetValue():获取得到的数值

最后通过 电压的值为: v = A D C 值 / 4096 ( 16 b i t ) ∗ 3.3 V ( 参 考 电 压 ) v = ADC 值/4096(16bit) * 3.3V(参考电压) v=ADC/4096(16bit)3.3V(

五、附件

STM32 ADC MDK5 工程
提取码:5bo6

测试
在这里插入图片描述

### STM32 HAL学习资源汇总 对于希望深入学习STM32 HAL的开发者来说,以下是几类重要的学习资料和官方文档推荐: #### 1. **STM32 HAL使用手册** - 官方提供了详细的《STM32 HAL使用手册》,这是理解HAL架构及其功能的核心参考资料。此手册涵盖了HAL的整体框架以及如何配置各种外设的功能[^1]。 - 手册下载地址为:https://gitcode.com/Open-source-documentation-tutorial/d78bd。 #### 2. **STM32 HAL实战开发指南** - 这是一本针对STM32F103系列微控制器的开发教程书籍,名为《STM32 HAL实战开发指南—F103霸道_V2》。书中不仅介绍了HAL的基础概念,还通过实际案例讲解了GPIO、定时器、串口通信等功能模块的应用方法[^2]。 #### 3. **STM32 HAL入门指南** - 对于初学者,《STM32 HAL入门指南-附示例代码》是一个很好的起点。这份材料解释了HAL作为硬件抽象层的作用,并列举了一些基础组件的操作方式,比如GPIO初始化、ADC数据采集等[^3]。 #### 4. **野火STM32 F103 HAL开发实战笔记** - 如果想了解具体外设的实际操作流程,“野火”的《STM32 F103 HAL开发实战指南笔记之简单外设总结》非常实用。例如,其中提到利用PA8引脚实现MCO时钟输出的具体过程,这可以帮助验证系统的时钟配置是否正确[^4]。 #### 示例代码片段 下面展示了一个简单的GPIO初始化代码示例,用于点亮LED灯: ```c #include "stm32f1xx_hal.h" void GPIO_Init(void){ __HAL_RCC_GPIOA_CLK_ENABLE(); // 启用GPIOA时钟 GPIO_InitTypeDef GPIO_InitStruct = {0}; /* 配置 PA5 为推挽输出模式 */ GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); } int main(void){ HAL_Init(); GPIO_Init(); while (1){ HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5); // 切换PA5状态 HAL_Delay(500); // 延迟500ms } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值