STM32(HAL库)通过ADC读取MQ2数据

目录

1、简介

2、CubeMX初始化配置

2.1 基础配置

2.1.1 SYS配置

 2.1.2 RCC配置

2.2 ADC外设配置

2.3 串口外设配置

 2.4 项目生成

 3、KEIL端程序整合

3.1 串口重映射

3.2 ADC数据采集

3.3 主函数代

3.4 效果展示


1、简介

本文通过STM32F103C8T6单片机通过HAL库方式对MQ2烟雾传感器进行数据的读取,并通过串口来进行显示。

2、CubeMX初始化配置

2.1 基础配置

2.1.1 SYS配置

 2.1.2 RCC配置

2.2 ADC外设配置

2.3 串口外设配置

 2.4 项目生成

 3、KEIL端程序整合

3.1 串口重映射

具体步骤:stm32(HAL库)使用printf函数打印到串口

3.2 ADC数据采集

首先在adc.c最下方添加ADC采集程序,如下所示:

 代码如下:

uint16_t ADC_IN_1(void) //ADC采集程序
{HAL_ADC_Start(&hadc1);//开始ADC采集HAL_ADC_PollForConversion(&hadc1,500);//等待采集结束if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1), HAL_ADC_STATE_REG_EOC))//读取ADC完成标志位{return HAL_ADC_GetValue(&hadc1);//读出ADC数值}return 0;
}

接着在adc.h中进行函数声明,如下图所示:

uint16_t ADC_IN_1(void);//ADC采集程序

3.3 主函数代码整合

首先定义变量接受ADC_IN_1()采集数据,如下图所示:

接着进行ADC采样校准,如下图所示:

 最后进行数据打印,如下图所示:

 所用代码(便于复制)如下:

uint8_t adc_mq2;HAL_ADCEx_Calibration_Start(&hadc1);//ADC采样校准adc_mq2 = ADC_IN_1();
printf("%d",adc_mq2);
HAL_Delay(200);

 main.c如下所示:

/* USER CODE BEGIN Header */
/********************************************************************************* @file           : main.c* @brief          : Main program body******************************************************************************* @attention** Copyright (c) 2023 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 */
/* Includes ------------------------------------------------------------------*/
#include "main.h"
#include "adc.h"
#include "usart.h"
#include "gpio.h"/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */uint8_t adc_mq2;/* USER CODE END Includes *//* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD *//* USER CODE END PTD *//* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
/* USER CODE END PD *//* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM *//* USER CODE END PM *//* Private variables ---------------------------------------------------------*//* USER CODE BEGIN PV *//* USER CODE END PV *//* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
/* USER CODE BEGIN PFP *//* USER CODE END PFP *//* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 *//* USER CODE END 0 *//*** @brief  The application entry point.* @retval int*/
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();MX_USART1_UART_Init();/* USER CODE BEGIN 2 */HAL_ADCEx_Calibration_Start(&hadc1);//ADC采样校准/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){adc_mq2 = ADC_IN_1()/100;printf("%d",adc_mq2);HAL_Delay(200);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/**	* @brief System Clock Configuration* @retval None*/
void SystemClock_Config(void)
{RCC_OscInitTypeDef RCC_OscInitStruct = {0};RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};/** Initializes the RCC Oscillators according to the specified parameters* in the RCC_OscInitTypeDef structure.*/RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;RCC_OscInitStruct.HSEState = RCC_HSE_ON;RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;RCC_OscInitStruct.HSIState = RCC_HSI_ON;RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){Error_Handler();}/** Initializes the CPU, AHB and APB buses clocks*/RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC;PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6;if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK){Error_Handler();}
}/* USER CODE BEGIN 4 *//* USER CODE END 4 *//*** @brief  This function is executed in case of error occurrence.* @retval None*/
void Error_Handler(void)
{/* USER CODE BEGIN Error_Handler_Debug *//* User can add his own implementation to report the HAL error return state */__disable_irq();while (1){}/* USER CODE END Error_Handler_Debug */
}#ifdef  USE_FULL_ASSERT
/*** @brief  Reports the name of the source file and the source line number*         where the assert_param error has occurred.* @param  file: pointer to the source file name* @param  line: assert_param error line source number* @retval None*/
void assert_failed(uint8_t *file, uint32_t line)
{/* USER CODE BEGIN 6 *//* User can add his own implementation to report the file name and line number,ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) *//* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

3.4 效果展示

上文如有错误,恳请各位大佬指正。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/27468.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解决Git fatal: refusing to merge unrelated histories报错

问题描述 当在远程建立了一个仓库,并且远程的仓库已经初始化了的情况,使用 git remote add origin gitgithub.com:xxx/xxx.git命令添加远程仓库后,执行git pull,然后提示如下: 大致意思就是需要关联我们的本地和远程分支。按照…

Nginx正向代理和反向代理详解

目录 一、什么是正向代理? 二、什么是反向代理? 三、正向代理和反向代理的作用 一、什么是正向代理? 正向代理,“它代理的是客户端”,是一个位于客户端和目标服务器之间的服务器,为了从目标服务器取得内…

给httprunnermanager接口自动化测试平台加点功能(七)

文章目录 一、背景1.1、用例列表test_list1.2、套件列表suite_list 二、实现2.1、用例edit页面2.2、套件edit页面 三、数据结构3.1、更新数据结构 四、知识扩展五、总结 一、背景 前面几章优化,从功能bug的优化、到列表的优化、还有字段的优化,暂时满足…

数据从发出到接收的细节介绍{封装与解封装}

系列文章目录 数通王国历险记(5) 目录 前言 一,数据封装的全过程 1.1,应用层的封装形式 1.2,传输层的封装形式 理解: 1.3,网络层的封装形式 理解: 1.4,数据链路层…

编程导航算法通关村第 1关 | 两个链表的第一个公共节点

编程导航算法通关村第 1关 | 白银挑战 剑指 Offer 52. 两个链表的第一个公共节点 集合/map 将headA中的链表,放在一个set集合中, 依次遍历headB, headB中第一个包含在set集合中的节点就是第一个公共子节点 ListNode getIntersectionNode(L…

WireShark

文章目录 IP协议部分协议对应协议号路由器IP分片IP分片的缺点 TCP协议[TCP MSS](https://blog.csdn.net/meihualing/article/details/113739693) UDP协议ARP ICMPDHCPDNSFTP wireshark可以学习网络协议,解决一些问题 IP协议 IP指网际互连协议,Internet P…

ROS节点通信Demo

0 开始之前 确保你已经安装了ROS (Robot Operating System)。 1 第一步: 创建一个ROS包 在开始编程前,我们首先创建一个新的ROS包(package)。移动到你的catkin workspace的 src 文件夹下,然后运行以下命令: cd ~/catkin_ws/sr…

Sentinel整合OpenFegin

之前学习了openFeign的使用&#xff0c;我是超链接 现在学习通过Sentinel来进行整合OpenFegin。 引入OpenFegin 我们需要在当前的8084项目中引入对应的依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sta…

Spring:表达式语言

Spring EL 概述使用概述 Spring 表达式(Spring EL) 是一种功能强大的表达式语言,以 #{ 表达式 } 作为定界符,用于在运行时对对象进行访问和操作。通过使用 Spring 表达式达到简化开发、减少逻辑或配置的编写的目的。 使用 Spring EL 主要可以引用 bean ,调用其属性和方…

基于PyQt5的桌面图像调试仿真平台开发(13)图像边缘显示

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

ES系列--es初探

一、前言 一般传统数据库&#xff0c;全文检索都实现的很鸡肋&#xff0c;因为一般也没人用数据库存文本字段。进 行全文检索需要扫描整个表&#xff0c;如果数据量大的话即使对 SQL 的语法优化&#xff0c;也收效甚微。建 立了索引&#xff0c;但是维护起来也很麻烦&#xff0…

深入学习 Redis - 常用数据类型,结构认识

目录 一、Redis数据类型 Redis 数据类型结构简单认识 每个数据类型具体的编码方式 1.string 2.hash 3.list 4.set 5.zset 典中典&#xff1a;记数字&#xff01;&#xff01;&#xff01; 6.查看 key 对应 value 的实际编码方式 如果本文有帮助到你&#xff0c;不…