#include "led.h" #include "delay.h" #include "sys.h" #include "stm32f10x.h" #include "stdio.h" #include "key.h" #include "usart.h" #include "drive_dht11.h" #include "bh1750.h" #include "CCS811.h" #include "CCS811_IIC.h" u8 humi=0;//湿度值 u8 temp=0;//温度值 u8 buffer[10]={0}; u16 GzVal=0; //实际光照值 char ShowBuf[16]={0}; void TIMER3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStrue; NVIC_InitTypeDef NVIC_InitStructure; TIM_TimeBaseInitStrue.TIM_Period=arr; TIM_TimeBaseInitStrue.TIM_Prescaler=psc; TIM_TimeBaseInitStrue.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInitStrue.TIM_ClockDivision=TIM_CounterMode_Up; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStrue); TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);//使能TIM3更新中断 //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx } u16 GetTimer=0;//采集时间计数器 我用P=U2/R 半波整流 void TIM3_IRQHandler(void)//中断服务程序 { if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET)//SET为1 { GetTimer++;//采集计数器 TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除TIM3的更新中断标志 } } u8 GetFlag=0; uint8_t sendBuff[16]={0}; int main(void) { NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级 delay_init(); //延时函数初始化 LED_Init(); //初始化与连接的硬件接口 uart_init(115200); delay_ms(1000); TIMER3_Int_Init(10000,71);//定时器初始化 //10ms进一次中断 BH1750_Init(); while(1) { if(GetTimer>100)//1S { GetTimer=0; if(dht11_read_data(buffer) == 0)//读取温湿度 { humi = buffer[0] + buffer[1] / 10;//取湿度值 temp = buffer[2] + buffer[3] / 10;//取温度值 } GzVal = Dispose(); printf("wsdgzcheck_X%dH%dD%dZ\r\n",temp,humi,GzVal);//发送到上位机app } } }