萌新想请问一下这个程序有什么问题吗!

#include "stm32f10x.h"
#include "delay.h"
#include "usart.h"
#include "MQ135.h"
#include "Serial.h"
 
int main(void)
{
	uint16_t AD0,AD1,AD2;
	uart_init(115200);
	printf("初始化完成\r\n");
	AD_Init();
	
	while(1)
	{
		AD0 = ADC_Trans(ADC_Channel_0);
	//	printf("电压为:%f\r\n",3.3/4095*AD);
		printf("PA0口烟雾浓度为:%.2f\r\n",AD0 * 99 / 4096.0);
		delay_ms(1000);
		if(AD0==0)
		{
			Serial_Printf("PA0口数据异常!\t");
		}
		
		AD1 = ADC_Trans(ADC_Channel_1);
		printf("PA1口烟雾浓度为:%.2f\r\n",AD1 * 99 / 4096.0);
		delay_ms(1000);
		if(AD1==0)
		{
			Serial_Printf("PA1口数据异常!\t");
		}
		
		AD2 = ADC_Trans(ADC_Channel_2);
		printf("PA2口烟雾浓度为:%.2f\r\n",AD2 * 99 / 4096.0);
		delay_ms(1000);
		if(AD2==0)
		{
			Serial_Printf("PA2口数据异常!\t");
		}
	}
}


上面是main.c的程序!

这是MQ135.c和MQ135.h的程序

#include "stm32f10x.h"                  // Device header
#include "MQ135.h"
void AD_Init(void)        //初始化PA0,PA1,PA2口作为ADC检测端,并且初始化ADC通道1
{
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	ADC_InitTypeDef ADC_InitStruct;
	ADC_InitStruct.ADC_ContinuousConvMode = DISABLE;
	ADC_InitStruct.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
	ADC_InitStruct.ADC_DataAlign = ADC_DataAlign_Right;
	ADC_InitStruct.ADC_Mode = ADC_Mode_Independent;
	ADC_InitStruct.ADC_NbrOfChannel = 1;
	ADC_InitStruct.ADC_ScanConvMode = DISABLE;
	ADC_Init(ADC1,&ADC_InitStruct);
	
	ADC_Cmd(ADC1,ENABLE);
	
	ADC_ResetCalibration(ADC1);
	while(ADC_GetResetCalibrationStatus(ADC1)==SET);
	ADC_StartCalibration(ADC1);
	while(ADC_GetCalibrationStatus(ADC1)==SET);
}
 
uint16_t ADC_Trans(uint8_t ADC_Channel)       //数据处理,求电压值的平均数
{
	uint16_t ADC_Value = 0;
	uint8_t i = 0;
	ADC_RegularChannelConfig(ADC1,ADC_Channel,1,ADC_SampleTime_55Cycles5);
	for(i = 0; i < 50; i++)
	{ 
		ADC_SoftwareStartConvCmd(ADC1,ENABLE);
		while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
		ADC_Value = ADC_Value + ADC_GetConversionValue(ADC1);
	}
	return ADC_Value / 50;
} 
#ifndef __MQ135_H
#define __MQ135_H
 
 
void AD_Init(void);
uint16_t ADC_Trans(uint8_t ADC_Channel);
 
#endif 

 本来想通过这个程序来依次检测PA0,PA1,PA2三个io口的数据,但是嘞数据总是出现错误。理论上将MQ135连接在PA0口上的时候,PA1和PA2口将不会有数据的产生,但是最后三个口都有数据显示在串口上了,而且拔掉电源也会有数据的显示。萌新想请问一下各位大佬是哪里出错了吗!谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值