自学内容网 自学内容网

STM32F407 HAL库单通道ADC采集并串口打印电压值

本文将介绍如何使用STM32F407的HAL库实现单通道ADC采集,并通过串口将采集到的电压值打印出来。具体地,我们将使用ADC1读取通道5(对应引脚PA5),并将转换后的电压值用串口1发送到串口助手上进行显示。

 一、开发环境

硬件:正点原子探索者 V3 STM32F407开发板

单片机:STM32F407ZGT6

Keil版本:5.32

STM32CubeMX版本:6.9.2

STM32Cube MCU Packges版本:STM32F4 V1.27.1

  二、配置STM32CubeMX

  1. 启动STM32CubeMX,新建STM32CubeMX项目
  2. 选择MCU:在软件中选择你的STM32型号-STM32F407ZGT6。
  3. 选择时钟源:

  4. 配置时钟:
  5. 使能Debug功能:Serial Wire
  6. HAL库时基选择:SysTick
  7. USART1配置:选择异步模式。
  8. 开启外部时钟:配置系统时钟,确保ADC和串口的外部时钟已开启。

  9. 配置ADC

1)选择ADC1作为采集模块。

2)设置ADC1的通道5(对应引脚PA5)为采集通道。

3)配置采样时间和分辨率。通常,采样时间越长,ADC的转换精度越高,但也会增加转换时间。

4)启用连续转换模式,以便ADC能够持续采集数据。

5)禁用扫描模式,因为我们只采集一个通道。

10.配置工程参数:在Project标签页中,配置项目名称和位置,选择工具链MDK-ARM。​ 11.生成代码:在Code Generator标签页中,配置工程外设文件与HAL库,勾选头文件.c和.h文件分开,然后点击Project > Generate Code生成代码。 

三、代码实现与部署

  1.  main.c增加代码:main.c的第1行添加printf的头文件#include<stdio.h>,在 while(1)里增加数行代码。​​​​​ADC电压换算时用到公式:待测电压=(ADC的返回值/4096​)∗3.3V​.

    /* USER CODE BEGIN Header */
    #include<stdio.h>
    /**
      ******************************************************************************
      * @file           : main.c
      * @brief          : Main program body
      ******************************************************************************
      * @attention
      *
      * Copyright (c) 2024 STMicroelectronics.
      * All rights reserved.
      *
      * This software is licensed under terms that can be found in the LICENSE file
      * in the root directory of this software component.
      * If no LICENSE file comes with this software, it is provided AS-IS.
      *
      ******************************************************************************
      */
    /* USER CODE END Header */
      while (1)
      {
        /* USER CODE END WHILE */
    
        /* USER CODE BEGIN 3 */
    
    HAL_ADC_Start(&hadc1); // 启动ADC采集  
      
            // 轮询ADC转换状态  
            if (HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY) == HAL_OK)  
            {  
                adc_value = HAL_ADC_GetValue(&hadc1); // 获取转换后的数字值  
      
                // 将数字值转换为电压值并格式化为字符串  
                sprintf(buffer, "Voltage: %.3fV\r\n", (adc_value / 4096.0) * 3.3);  
      
                // 发送电压值到串口  
                printf("%s",buffer);  
            }  
      
            HAL_Delay(500); // 添加延时  
        }  
      
      /* USER CODE END 3 */
  2.  usart.c增加代码:usart.c的第1行添加头文件#include <stdio.h>
    #include <string.h>,在末尾用户代码区增加如下代码。printf调用“fputc()”,fgetc(),该函数会使用HAL_UART_Transmit发送数据。
    /*
    * 添加如下代码,可不在工程设置中勾选Use MicroLIB
    */
    #pragma import(__use_no_semihosting)
    
    struct __FILE
    {
    int a;
    };
    
    FILE __stdout;
    FILE __stdin;
    
    void _sys_exit(int x)
    {
    }
    
    
    /*****************************************************
    *function: 写字符文件函数
    *param1: 输出的字符
    *param2: 文件指针
    *return: 输出字符的ASCII码
    ******************************************************/
    int fputc(int ch, FILE *f)
    {
    HAL_UART_Transmit(&huart1, (uint8_t*)&ch, 1, 10);
    return ch;
    }
    /*****************************************************
    *function: 读字符文件函数
    *param1: 文件指针
    *return: 读取字符的ASCII码
    ******************************************************/
    int fgetc(FILE *f)
    {
    uint8_t ch = 0;
    HAL_UART_Receive(&huart1, (uint8_t*)&ch, 1, 10);
    return (int)ch;
    }
  3. 连接USART1:用USB转TTL工具连接当前硬件USART1的PA9、PA10,GND。​​
  4. 打开串口助手:​​
  5. 编译代码:Keil编译生成的代码。
  6. 烧录程序:将编译好的程序用ST-LINK烧录到STM32微控制器中。

四、运行结果

观察结果:一旦程序烧录完成并运行,串口助手打印出PA5的电压,当接地的时候得出的电压值是0,当输入正弦波得到如下结果。

voltage0.956
Voltage0.16
Voltage0.175
Voltage0.997
Voltage2.22
Voltage3.19
Voltage3.299
Voltage2.829
Voltage1.695
Voltage0.582
Voltage0.076
Voltage0.419
Voltage1.482
Voltage2.681
Voltage3.299
Voltage3.273
Voltage2.402
Voltage1.191
Voltage0.272
Voltage0.118
Voltage0.827
Voltage2.017
Voltage3.082
Voltage3.299
Voltage2.989
Voltage1.88
Voltage0.702
Voltage0.085
Voltage0.325
Voltage1.304
Voltage2.516
Voltage3.299
Voltage3.299
Voltage2.52
Voltage1.304
Voltage0.338
Voltage0.083
Voltage0.706
Voltage1.859
Voltage2.977
Voltage3.299
Voltage3.057
Voltage1.994
Voltage0.808
Voltage0.109
Voltage0.265
Voltage1.196

​导入excel看波形

​五、注意事项

1.确保你的开发环境和工具已经正确安装和配置。

2.如果没有打印电压值,按一下复位键,检查连接和电源是否正确,注意根据你所用的硬件来接线,不要接错线了。


原文地址:https://blog.csdn.net/m0_37371085/article/details/142715196

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!