bigfanofloT 发表于 2017-5-13 20:33:03

MQ-135空气质量传感器驱动

本帖最后由 bigfanofloT 于 2017-5-16 19:42 编辑

一、MQ-135空气质量传感器介绍
参考此帖http://club.gizwits.com/thread-6484-1-1.html
二、硬件连线
根据Nucleo-F767ZI原理图,我们选择Arduino UNO接口的A1,即STM32F767ZIT6的PC0,ADC1通道10

三、完整源码
头文件如下:
/**
***********************************
* @file    ADC/ADC_RegularConversion_Polling/Inc/main.h
* @authorMCD Application Team
* @version V1.0.2
* @date    30-December-2016
* @brief   Header for main.c module
***********************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*   1. Redistributions of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
*   2. Redistributions in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the documentation
*      and/or other materials provided with the distribution.
*   3. Neither the name of STMicroelectronics nor the names of its contributors
*      may be used to endorse or promote products derived from this software
*      without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
***********************************
*/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MAIN_H
#define __MAIN_H

/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
#include "STM32F7xx_hal_adc.h"

/* Exported types ------------------------------------------------------------*/
/* Exported constants --------------------------------------------------------*/
/* User can use this section to tailor ADCx instance used and associated
   resources */
   
/* Definition for ADCx clock resources */
#define ADCx                            ADC1
#define ADCx_CLK_ENABLE()               __HAL_RCC_ADC1_CLK_ENABLE()
#define ADCx_CHANNEL_GPIO_CLK_ENABLE()__HAL_RCC_GPIOC_CLK_ENABLE()

#define ADCx_FORCE_RESET()            __HAL_RCC_ADC_FORCE_RESET()
#define ADCx_RELEASE_RESET()            __HAL_RCC_ADC_RELEASE_RESET()

/* Definition for ADCx Channel Pin */
#define ADCx_CHANNEL_PIN                GPIO_PIN_0//对应板卡A1
#define ADCx_CHANNEL_GPIO_PORT          GPIOC

/* Definition for ADCx's Channel */
#define ADCx_CHANNEL                  ADC_CHANNEL_10
#define SAMPLINGTIME                  ADC_SAMPLETIME_3CYCLES

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */
void MQ135_Init(void);
int MQ135_GetValue(void);

#endif /* __MAIN_H */

/*********** (C) COPYRIGHT STMicroelectronics ***END OF FILE**/
源文件如下:
/**
***********************************
* @file    ADC/ADC_RegularConversion_Polling/Src/main.c
* @authorMCD Application Team
* @version V1.0.2
* @date    30-December-2016
* @brief   This example describes how to use Polling mode to convert data.
***********************************
* @attention
*
* <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*   1. Redistributions of source code must retain the above copyright notice,
*      this list of conditions and the following disclaimer.
*   2. Redistributions in binary form must reproduce the above copyright notice,
*      this list of conditions and the following disclaimer in the documentation
*      and/or other materials provided with the distribution.
*   3. Neither the name of STMicroelectronics nor the names of its contributors
*      may be used to endorse or promote products derived from this software
*      without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
***********************************
*/

/* Includes ------------------------------------------------------------------*/
#include "hal_mq135.h"

/** @addtogroup STM32F7xx_HAL_Examples
* @{
*/

/** @addtogroup ADC_RegularConversion_Polling
* @{
*/

/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* ADC handler declaration */
ADC_HandleTypeDef    AdcHandle;



void MQ135_Init(void)
{
ADC_ChannelConfTypeDef sConfig;
      
GPIO_InitTypeDef          GPIO_InitStruct;
/*##-1- Enable peripherals and GPIO Clocks #################################*/
/* ADC Periph clock enable */
ADCx_CLK_ENABLE();
/* Enable GPIO clock ******************/
ADCx_CHANNEL_GPIO_CLK_ENABLE();
/*##-2- Configure peripheral GPIO ##########################################*/
/* ADC Channel GPIO pin configuration */
GPIO_InitStruct.Pin = ADCx_CHANNEL_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(ADCx_CHANNEL_GPIO_PORT, &GPIO_InitStruct);
      

/*##-1- Configure the ADC peripheral #######################################*/
AdcHandle.Instance          = ADCx;

ADCx_CLK_ENABLE() ;
      ADCx_CHANNEL_GPIO_CLK_ENABLE();
AdcHandle.Init.ClockPrescaler      = ADC_CLOCKPRESCALER_PCLK_DIV4;
AdcHandle.Init.Resolution            = ADC_RESOLUTION_12B;
AdcHandle.Init.ScanConvMode          = DISABLE;                     /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */
AdcHandle.Init.ContinuousConvMode    = DISABLE;                     /* Continuous mode disabled to have only 1 conversion at each conversion trig */
AdcHandle.Init.DiscontinuousConvMode = DISABLE;                     /* Parameter discarded because sequencer is disabled */
AdcHandle.Init.NbrOfDiscConversion   = 0;
AdcHandle.Init.ExternalTrigConvEdge= ADC_EXTERNALTRIGCONVEDGE_NONE;      /* Conversion start trigged at each external event */
AdcHandle.Init.ExternalTrigConv      = ADC_EXTERNALTRIGCONV_T1_CC1;
AdcHandle.Init.DataAlign             = ADC_DATAALIGN_RIGHT;
AdcHandle.Init.NbrOfConversion       = 1;
AdcHandle.Init.DMAContinuousRequests = DISABLE;
AdcHandle.Init.EOCSelection          = DISABLE;

if (HAL_ADC_Init(&AdcHandle) != HAL_OK)
{
    /* ADC initialization Error */

}

/*##-2- Configure ADC regular channel ######################################*/

sConfig.Channel      = ADCx_CHANNEL;                /* Sampled channel number */
sConfig.Rank         = 1;          /* Rank of sampled channel number ADCx_CHANNEL */
sConfig.SamplingTime = ADC_SAMPLETIME_56CYCLES;    /* Sampling time (number of clock cycles unit) */
sConfig.Offset = 0;                                 /* Parameter discarded because offset correction is disabled */

if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK)
{
    /* Channel Configuration Error */

}

if (HAL_ADC_Start(&AdcHandle) != HAL_OK)
{
    /* Start Conversation Error */

}


}
//just return adc raw value.
int MQ135_GetValue(void)
{
      if (HAL_ADC_Start(&AdcHandle) != HAL_OK)
{

}
    return HAL_ADC_GetValue(&AdcHandle);
}
      


/**
* @}
*/

/**
* @}
*/

/*********** (C) COPYRIGHT STMicroelectronics ***END OF FILE**/

本系列帖子目录:
http://club.gizwits.com/thread-6544-1-1.html

brad 发表于 2020-5-5 15:12:20

请问一下这个芯片如果是STM32F103C8的,驱动里面的串口是不是直接对应改一改还有hal库换一下就能直接用?
页: [1]
查看完整版本: MQ-135空气质量传感器驱动