STM32CUBEMX(9)--ADC通过轮询方式读取,USART打印
STM32CUBEMX--ADC通过轮询方式读取,USART打印
- 概述
- 硬件准备
- 选择芯片型号
- 配置时钟源
- 配置时钟树
- 串口配置
- ADC配置
- 生成工程设置
- 生成代码
- 配置keil
- 代码
- 演示效果
- 视频讲解
- 最后
概述
本章通过使用模数转换器(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);//启动ADCHAL_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("\nadc%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,输出如下。
视频讲解
https://www.bilibili.com/video/BV1oD4y1Q71y
最后
关注微信公众号『记贴』,持续更新文章和学习资料,可加作者的微信交流学习!
STM32CUBEMX(9)--ADC通过轮询方式读取,USART打印相关推荐
- 使用轮询方式进行ADC转换(野火STM32 MINI开发板)
实验器材:野火STM32 MINI开发板 任务目标:利用ADC采集电位器的电压,并通过串口调试助手输出变化的电压值 任务内容:调整开发板上的滑动变阻器,将电压值通过开发板到PC进行显示 开发板原理图: ...
- STM32F1与STM32CubeIDE快速入门-ADC轮询方式实现PWM调光器
ADC轮询方式实现PWM调光器 在模拟输入通道上使用 ADC 执行模数转换的最简单的代码方法. 然而,这并不是所有情况下的有效方式,因为它被认为是使用 ADC 的一种阻塞方式. 通过这种方式,我们开始 ...
- 选中断还是轮询方式?深究其中的区别
作者 | 肖遥 来源 | 技术让梦想更伟大 摸水了一周,准备在家里好好敲敲代码,赶赶稿子,正当我专心输出的时候,被老婆打断了. 娃拉臭了,赶紧过来!语气中带着一丝丝我害怕的味道. 怎么办?没办法只有过 ...
- DW1000开发笔记(五)DW1000使用轮询方式接收数据
系列文章 DW1000开发笔记(一)DW1000芯片概览 DW1000开发笔记(二)使用STM32硬件SPI+STM32cubeMX+HAL库测试DW1000通信 DW1000开发笔记(三)基于STM ...
- Tiny4412裸机程序,按键检测(轮询方式)
由于前几天出差,博客没有更新,今天看了看Tiny4412的原理图,把按键扫描程序写了一下,用的是轮询方式,后面会有中断方式的实现,闲话少说,进入正题,程序由前一个实验Tiny4412之C语言实现流水灯 ...
- modbus tcp主站和从站_【智】S7200PLC与台达变频器MODBUS轮询实时读取详解
大家好,我是微控小智,今天又跟大家见面了.学习不是一蹴而就,需要坚持,做技术亦是如此,厚积才能博发. 上次分享的S7-200PLC与台达VFD_M变频器Modbus通讯案例程序,是采用SM0.5时钟脉 ...
- oracle轮询方式循环输出,LGWR的两种模式(POST/WAIT和POLLING)
11.2之前,oracle的lgwr写入模式为post/wait 11.2之后新增了polling模式,可以与post/wait模式自动切换 通过隐藏参数 _use_adaptive_log_file ...
- RTX5 | 内存池03 - 共享内存用于线程之间的通讯(轮询方式)
文章目录 一.前言 怎样防止内存溢出? 二.实验目的 三.代码 3.1.main.h 3.2.main.c 四.Debug 4.1.Debug (printf) Viewer 4.2.修改一下程序:线 ...
- STM32单片机硬件I2C驱动程序(软件轮询方式)---摘自:FeoTech
感谢原作者:FeoTech 原文网址:http://feotech.com/?p=69 本程序主要用于驱动STM32单片机芯片的硬件I2C寄存器,实现通过使用芯片自带的I2C寄存器进行数据的发送与 ...
最新文章
- 插入空行_如何一键插入表格空行,这个方法才最高级!
- BZOJ——2134: 单选错位
- C++ explicit关键字
- python获取当前线程_Python爬虫(线程,进程)
- C语言sql参数化查询,使用LIKE的sql参数化查询
- 一种基于annotation的Spring-mvc权限控制方法
- java——base64 加密和解密
- Python:命令安装pyQt5相关插件
- c语言全局变量6,C语言全局变量定义方法
- 让工程师拥有一台“超级”计算机——字节跳动客户端编译加速方案
- bilibili怎么用用户名登录_b站账号(bilibili免费账号密码)
- php pcntl_alarm,pcntl_alarm定时闹钟信号详解
- SuperMap iDesktop 9D 制作专题地图
- 批量合并word文档
- mtd-utils交叉编译
- 陈艾盐:《春燕》百集访谈节目第五十九集
- 云存储和网盘有何区别
- php中美元符号是什么意思,js程序中美元符号$是什么
- 20140228老沙的感觉
- (转载)使用Android Studio对代码进行重构