STM32CUBEMX(9)--ADC通过轮询方式读取,USART打印

发布者:BlissfulDreams最新更新时间:2024-05-17 来源: elecfans关键字:STM32CUBEMX  ADC  轮询方式  USART打印 手机看文章 扫描二维码
随时随地手机看文章

概述

本章通过使用模数转换器(ADC),通过轮询方式采集多个ADC通道电压。

之前已经做过DMA方式采样,详情请查看:


https://blog.csdn.net/qq_24312945/article/details/106557538

硬件准备

首先需要准备一个开发板,这里我准备的是NUCLEO-F030R8的开发板:

在这里插入图片描述

选择芯片型号

使用STM32CUBEMX选择芯片stm32f030r8,如下所示:

在这里插入图片描述

配置时钟源

HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

在这里插入图片描述

配置时钟树

STM32F0的最高主频到48M,所以配置48即可:

在这里插入图片描述

串口配置

本次实验使用的串口1进行串口通信波特率配置为115200。

在这里插入图片描述

ADC配置

STM32f030中,有一个ADC(模拟/数字转换器),每个 ADC 有 12 位、 10 位、 8 位和 6 位可选,每个ADC有16个外部通道、2个内部通道和一个VBAT 通道的信号。

本文将开ADC的IN0、IN1、IN15一共三个通道,来分别读取ADC,由于串口2和IN2,IN3复用,故不使用IN2、IN3。配置如下:

在这里插入图片描述

生成工程设置

注意在生产工程设置中不能出现中文,不然会报错。

在这里插入图片描述

生成代码

在这里插入图片描述

配置keil

在这里插入图片描述

代码

在main.c中,添加头文件,若不添加会出现 identifier 'FILE' is undefined报错。


/* USER CODE BEGIN Includes */

#include 'stdio.h'

/* USER CODE END Includes */

函数声明和串口重定向:


/* USER CODE BEGIN PTD */

#ifdef __GNUC__

#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)

#else

#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)

#endif /* __GNUC__ */



PUTCHAR_PROTOTYPE

{

    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);

    return ch;

}

/* USER CODE END PTD */

变量定义:


/* USER CODE BEGIN 0 */

uint8_t i;

uint16_t adcBuf[3];//存放ADC

/* USER CODE END 0 */

主循环:


复制

/* USER CODE BEGIN WHILE */

  while (1)

  {

    /* USER CODE END WHILE */


    /* USER CODE BEGIN 3 */

    i=0; 

 while(i<3)

 {

  HAL_ADC_Start(&hadc);//启动ADC

  HAL_ADC_PollForConversion(&hadc,0xffff);//表示等待转换完成,第二个参数表示超时时间,单位ms.

  //HAL_ADC_GetState(&hadc1)为换取ADC状态,HAL_ADC_STATE_REG_EOC表示转换完成标志位,转换数据可用。

  if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc),HAL_ADC_STATE_REG_EOC))//就是判断转换完成标志位是否设置,HAL_ADC_STATE_REG_EOC表示转换完成标志位,转换数据可用

  {

   //读取ADC转换数据,数据为12位。查看数据手册可知,寄存器为16位存储转换数据,数据右对齐,则转换的数据范围为0~2^12-1,即0~4095.

   adcBuf[i]=HAL_ADC_GetValue(&hadc);

     printf('

adc%d=%4.0d,电压=%1.4f',i,adcBuf[i],adcBuf[i]*3.3f/4096);

   i++;

  }

 }


 HAL_ADC_Stop(&hadc);

 HAL_Delay(500);        

  }

  /* USER CODE END 3 */


演示效果

设定adc0口接3.3V,adc1口接GND,adc15口接1.5V,输出如下。

在这里插入图片描述


关键字:STM32CUBEMX  ADC  轮询方式  USART打印 引用地址:STM32CUBEMX(9)--ADC通过轮询方式读取,USART打印

上一篇:STM32U575/585 MCU硬件开发入门
下一篇:聊聊一个关于TIMER事件触发中断的响应话题

推荐阅读最新更新时间:2026-03-24 23:48

stm32f103——按键检测(轮询方式
我们下面来讲一讲,GPIO在输入模式下检测按键是否被按下: 首先我们来看看按键按下时,K1处电压的变化情况是什么: 我们看到,按键按下时,K1处的电压并不是立马就下降为0v,因为按键有机械的弹性形变,导致按键被按下时,会发生抖动。我们用GPIO来读取K1处的电压是否为0,如果为低电平,则表示按键被按下。被按下后,如果为高电平,则表示按键被抬起来了。 但是,在这个按键抖动的过程中,电平有上升沿也有下降沿,电压有高电平也有低电平。所以,在这一段抖动的部分的时间段内,如果我们用GPIO去判断,由于电平忽高忽低,我们的程序就会识别出来,按键在被按下后马上就抬起来了。但是,实际上并不是这样。所以,我们需要跳过按键被按下时的前50
[单片机]
stm32f103——按键检测(<font color='red'>轮询</font><font color='red'>方式</font>)
嵌入式按键驱动,支持短按、长按、双击(轮询方式)
目录: 1:概述 2:代码功能 3:代码分享 概述: 代码利用轮询方式对按键状态进行扫描,扫描得出按键的键值(短按、长按、双击),然后根据键值进行相应的事件处理; 平台:奋斗STM32F103 V5开发板 开发环境:KEIL MDK5 代码功能: 短按K1按键,LED1灯闪烁,闪烁间隔250ms; 长按K1按键1.5S以上,三个LED同时闪烁,闪烁间隔250ms; 双击K1按键,实现三个LED的流水灯; 代码分享: main.c函数: /* *FUNC:轮询按键键值,实现按键短按(单击)、长按、双击功能 *MCU:stm32f103 *DATE:2016/10/07
[单片机]
STM32CubeMX系列教程7:模数转换(ADC)
本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个ADC通道电压。 1.ADC 本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击STM32F746I.ioc打开STM32cubeMX的工程文件重新配置。ADC1外设选择温度传感器通道。 ADC1配置如下,选择默认设置。其Date Alignment设置为数据右对齐。 生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。 在stm32f7xx_hal_adc.h头文件中可以找到如下ADC操作函数
[单片机]
<font color='red'>STM32CubeMX</font>系列教程7:模数转换(<font color='red'>ADC</font>)
STM32CubeMX学习教程之七:ADC读取电压并输出到串口
软件: STM32CubeMX V4.25.0 System Workbench V2.4 固件库版本: STM32Cube FW_F1 V1.6.1 硬件: OneNet 麒麟座V2.3 在STM32CubeMX中新建项目,选择正确的MCU型号 首先设置RCC和SYS,如下图 配置USART1为Asychronous模式 UART1配置用默认的115200,8, None和1就好。 然后设置PA6引脚为ADC2_IN6, 完整引脚配置如下图: 然后根据板子实际情况设置时钟(麒麟座外部晶振是12M,STM32F103x的最高主频是72M),注意CubeMX
[单片机]
<font color='red'>STM32CubeMX</font>学习教程之七:<font color='red'>ADC</font>读取电压并输出到串口
STM32CubeMX保姆级安装教程
STM32CubeMX 简介: STM32CubeMX 是 ST 意法半导体近几年来大力推荐的STM32 芯片图形化配置工具,目的就是为了方便开发者, 允许用户使用图形化向导生成C 初始化代码,可以大大减轻开发工作,时间和费用,提高开发效率。STM32CubeMX几乎覆盖了STM32 全系列芯片。 在CubeMX上,通过傻瓜化的操作便能实现相关配置,最终能够生成C语言代码, 省去了我们配置各种外设的时间,大大的节省了时间。 安装CubeMx一共需要三个东西: JRE (Java Runtime Environment) Java运行环境 运行JAVA程序所必须的环境的集合 STM32CubeMX.exe STM32 HAL固
[单片机]
基于STM32CUBEMX驱动低压步进器电机驱动器STSPIN220(1)----套件概述
套件概述 STM32C011F4Px_STSPIN220 是一款基于 STM32C011F4Px 的低压步进电机驱动套件。其中,STSPIN220 是一款步进电机驱动器,在一个小型 VFQFPN 3 x 3 x 1.0 mm 封装中集成了控制逻辑和低 RDS(开启)功率级。该套件提供一整套保护功能,包括过电流、过热和短路保护,并且可以强制进入零消耗状态,从而显著延长电池寿命。 最近在弄ST的课程,需要样片的可以加qun申请:615061293 。 视频教学 https://www.bilibili.com/video/BV1Ju4y1R7mA/ 19:14 基于STM32CUBEMX驱动低压步进器电机驱动器STSP
[单片机]
STM32CUBEMX生成freeRTOS代码的时候出现警告
概述 最近做新项目使用了FREERTOS.1,执行生成代码时提示: WARNINGS: - When FreeRTOS is used, it is strongly recommanded to use HAL timebase source other than the Systick. HAL函数如果是阻塞型呼叫,內部会用到HAL_Delay(),FreeRTOS应该还是使用SystTick。如果使用的时基操作來源一样,怕有不可预期问题出现,故选择其他定时器。 此时在生成代码报错就会消失。
[单片机]
STM32CubeMX操作
1.更改库安装路径 2.下载库 这里下载F1
[单片机]
<font color='red'>STM32CubeMX</font>操作
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved