STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

12 篇文章 3 订阅
9 篇文章 2 订阅
本文档详细记录了如何使用STM32F407微控制器通过HAL库配置ADC来采集MQ135空气质量传感器的数据,并将结果显示在OLED屏幕上。MQ135是一种低成本、长寿命的传感器,能检测多种有害气体。通过CubeMX配置了I2C驱动OLED和ADC,然后在Keil中编写MQ135的初始化和数据读取函数,实现了实时数据显示。
摘要由CSDN通过智能技术生成

STM32F407霸天虎HAL库学习笔记——使用ADC采集MQ135的数据并通过OLED显示

MQ135介绍:MQ135是测量空气污染情况常用的一个传感器,具有代表性,价格低,寿命长,敏感度也OK,主要用于测量空气中二氧化碳,氮氧化物,氨气,酒精,苯类等。这几样气体可以说都属于家用空气污染测定中的重要成份,因此用这个传感器刚刚好。
在这里插入图片描述
如上图,MQ135的引脚从上到下依次是:VCC、GND、DO、AO
DO:输出数字信号,当监测到空气污染达到阀值时,DO口输出高电平,相当于一个开关,适用于做一个气体上限报警器,本次实验不用到DO口
AO:输出模拟信号,这个传感器使用的电压是5V,所以在接VCC的时候需要接到开发板的5V输出口上。

一、软件准备

软件准备

二、硬件准备

STM32F407霸天虎
DAP高速下载器
USB转串口线

三、CubeMX配置

STM32F407霸天虎用的是STM32F407ZGT6
在这里插入图片描述
选择外部高速时钟
在这里插入图片描述
在这里插入图片描述

因为本次实验需要用到OLED,所以I2C的配置如下:(具体通过I2C驱动OLED屏幕可以看我上篇文章
在这里插入图片描述
ADC配置如下:
在这里插入图片描述
这里插入一些ADC的知识

1、STM32F407ZGT6 有 3 个 ADC,每个 ADC 有 12 位、10 位、8 位和 6 位可选,每个 ADC 有 16 个外部通道。另外还有两个内部 ADC 源和 VBAT 通道挂在 ADC1 上。ADC 具有独立模式、双重模
式和三重模式,对于不同 AD 转换要求几乎都有合适的模式可选。
2、这是3个ADC的IO分配图,在CubeMX中也能看到在这里插入图片描述
3、模拟电压经过 ADC 转换后,是一个 12 位的数字值,如果通过串口以 16 进制打印出来的话,可
读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用
万用表测)对比,看看转换是否准确。转换公式为:模拟电压 = 数字电压*3.3/4096

时钟树选择168MHz,具体配置方法见上篇的时钟树配置在这里插入图片描述
而后根据自己的喜好编辑工程的名称,存放位置,IDE选择ARM-MDKV5
在这里插入图片描述
在这里插入图片描述

四、Keil

由于我们的Debug用的是DAP,如图下选择Debug和下载配置
在这里插入图片描述

MQ135.c

本来MQ135的采集可以单独写在main函数里即可完成采集,但是为了代码可移植性高,我将其作为函数单独封装在了.c文件里。

#include "MQ135.h"
#include "adc.h"
#include "oled.h"

/**
  * @brief    MQ135的初始化,启动ADC1
  * @param    none
  * @retval   none
*/
void MQ135_Init(void)
{
	HAL_ADC_Start(&hadc1);
  
  HAL_ADC_PollForConversion(&hadc1, 50);
	
}

/**
  * @brief    读取MQ135的ADc值
  * @param    none 
  * @retval   none
*/
void MQ135_ReadData(void)
{
	float vol;				//实际所得的电压值
	int val;					//输入转换的数字量
	if(HAL_IS_BIT_SET(HAL_ADC_GetState(&hadc1),HAL_ADC_STATE_REG_EOC))
        {
            val = HAL_ADC_GetValue(&hadc1);
        }
				vol = (float)val*3.3 / 4096;
        OLED_ShowString(0,2,"ADC:",16);
		OLED_ShowNum(30,2,val,4,16);
        OLED_ShowString(0,4,"VOL:",16);
		OLED_Showfloat(30,4,vol,1,3,16);
	HAL_Delay(100);
}




MQ135.h

#ifdef 	__MQ135_H__
#define	__MQ135_H__

#include "stm32f4xx_hal.h"


void MQ135_Init(void);
void MQ135_ReadData(void);

#endif

main函数

 /* USER CODE BEGIN 2 */
	OLED_Init();
	OLED_Clear();
	MQ135_Init();
  /* USER CODE END 2 */

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

    /* USER CODE BEGIN 3 */
		OLED_ShowCHinese(0,0,0);  //物
		OLED_ShowCHinese(16,0,1);	//联
		OLED_ShowCHinese(32,0,2);	//网
		OLED_ShowCHinese(48,0,3);	//小
		OLED_ShowCHinese(64,0,4);	//白
		MQ135_ReadData();
  }
  /* USER CODE END 3 */

五、实验效果

请添加图片描述

  • 3
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值