STM32 BMP280模块 获取气压温度高度传感器数据 TFT显示
简介
BMP280是博世最新推出的数字气压传感器,具有卓越的性能和低廉的价格,相对精度为±0.12 hPa(相当于±1米),传感器功耗仅有2.7μA,包括压力和温度测量功能。
气压传感器支持SPI和IIC通信接口,相比上一代的BMP180,精度已有相当大的提升,非常适合应用于低成本的多旋翼飞行器飞行控制器上,价格仅有目前流行的MS5611的四分之一。
传感器数据获取流程
BMP280的测试启动流程
(1)读取BMP280的id,其值等于0x58。
(2)把补偿寄存器的值都读出来。
(3)对BMP280进行reset。
(4)对BMP280的数据采集精度,模式。。。等进行配置。
(5)给点延时,等待数据采集完毕放入寄存器中。
(6)读取寄存器中的采集数据。
工程
1.BMP280.C
2.BMP280.H
BMP280.C
#include "bmp280.h"
void BMP_IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE );
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12|GPIO_Pin_11;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP ;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOC,&GPIO_InitStructure);
IIC_SCL=1;
IIC_SDA=1;
}
void BMP_IIC_Start(void)
{
SDA_OUT();
IIC_SDA=1;
IIC_SCL=1;
delay_us(4);
IIC_SDA=0;
delay_us(4);
IIC_SCL=0;
}
void BMP_IIC_Stop(void)
{
SDA_OUT();
IIC_SCL=0;
IIC_SDA=0;
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;
delay_us(4);
}
u8 BMP_IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
BMP_IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;
}
void BMP_IIC_Ack(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void BMP_IIC_NAck(void)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
}
void BMP_IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
u8 BMP_IIC_Read_Byte(unsigned char ack)
{
unsigned char i,receive=0;
SDA_IN();
for(i=0;i<8;i++ )
{
IIC_SCL=0;
delay_us(2);
IIC_SCL=1;
receive<<=1;
if(READ_SDA)receive++;
delay_us(1);
}
if (!ack)
BMP_IIC_NAck();
else
BMP_IIC_Ack();
return receive;
}
u8 BMP_iicDevReadByte(u8 devaddr,u8 addr)
{
u8 temp=0;
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr);
BMP_IIC_Wait_Ack();
BMP_IIC_Send_Byte(addr);
BMP_IIC_Wait_Ack();
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr|1);
BMP_IIC_Wait_Ack();
temp=BMP_IIC_Read_Byte(0);
BMP_IIC_Stop();
return temp;
}
void BMP_iicDevRead(u8 devaddr,u8 addr,u8 len,u8 *rbuf)
{
int i=0;
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr);
BMP_IIC_Wait_Ack();
BMP_IIC_Send_Byte(addr);
BMP_IIC_Wait_Ack();
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr|1);
BMP_IIC_Wait_Ack();
for(i=0; i<len; i++)
{
if(i==len-1)
{
rbuf[i]=BMP_IIC_Read_Byte(0);
}
else
rbuf[i]=BMP_IIC_Read_Byte(1);
}
BMP_IIC_Stop( );
}
void BMP_iicDevWriteByte(u8 devaddr,u8 addr,u8 data)
{
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr);
BMP_IIC_Wait_Ack();
BMP_IIC_Send_Byte(addr);
BMP_IIC_Wait_Ack();
BMP_IIC_Send_Byte(data);
BMP_IIC_Wait_Ack();
BMP_IIC_Stop();
}
void BMP_iicDevWrite(u8 devaddr,u8 addr,u8 len,u8 *wbuf)
{
int i=0;
BMP_IIC_Start();
BMP_IIC_Send_Byte(devaddr);
BMP_IIC_Wait_Ack();
BMP_IIC_Send_Byte(addr);
BMP_IIC_Wait_Ack();
for(i=0; i<len; i++)
{
BMP_IIC_Send_Byte(wbuf[i]);
BMP_IIC_Wait_Ack();
}
BMP_IIC_Stop( );
}
#define BMP280_PRESSURE_OSR (BMP280_OVERSAMP_8X)
#define BMP280_TEMPERATURE_OSR (BMP280_OVERSAMP_16X)
#define BMP280_MODE (BMP280_PRESSURE_OSR<<2|BMP280_TEMPERATURE_OSR<<5|BMP280_NORMAL_MODE)
typedef struct
{
u16 dig_T1;
s16 dig_T2;
s16 dig_T3;
u16 dig_P1;
s16 dig_P2;
s16 dig_P3;
s16 dig_P4;
s16 dig_P5;
s16 dig_P6;
s16 dig_P7;
s16 dig_P8;
s16 dig_P9;
s32 t_fine;
} bmp280Calib;
bmp280Calib bmp280Cal;
static u8 bmp280ID=0;
static bool isInit=false;
static s32 bmp280RawPressure=0;
static s32 bmp280RawTemperature=0;
static void bmp280GetPressure(void);
static void presssureFilter(float* in,float* out);
static float bmp280PressureToAltitude(float* pressure);
bool bmp280Init(void)
{
if (isInit)
return true;
BMP_IIC_Init();
delay_ms(20);
bmp280ID=BMP_iicDevReadByte(BMP280_ADDR,BMP280_CHIP_ID);
if(bmp280ID==BMP280_DEFAULT_CHIP_ID)
printf("BMP280 ID IS: 0x%X\n",bmp280ID);
else
return false;
BMP_iicDevRead(BMP280_ADDR,BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG,24,(u8 *)&bmp280Cal);
BMP_iicDevWriteByte(BMP280_ADDR,BMP280_CTRL_MEAS_REG,BMP280_MODE);
BMP_iicDevWriteByte(BMP280_ADDR,BMP280_CONFIG_REG,5<<2);
isInit=true;
return true;
}
static void bmp280GetPressure(void)
{
u8 data[BMP280_DATA_FRAME_SIZE];
BMP_iicDevRead(BMP280_ADDR,BMP280_PRESSURE_MSB_REG,BMP280_DATA_FRAME_SIZE,data);
bmp280RawPressure=(s32)((((uint32_t)(data[0]))<<12)|(((uint32_t)(data[1]))<<4)|((uint32_t)data[2]>>4));
bmp280RawTemperature=(s32)((((uint32_t)(data[3]))<<12)|(((uint32_t)(data[4]))<<4)|((uint32_t)data[5]>>4));
}
static s32 bmp280CompensateT(s32 adcT)
{
s32 var1,var2,T;
var1=((((adcT>>3)-((s32)bmp280Cal.dig_T1<<1)))*((s32)bmp280Cal.dig_T2))>>11;
var2=(((((adcT>>4)-((s32)bmp280Cal.dig_T1))*((adcT>>4)-((s32)bmp280Cal.dig_T1)))>>12)*((s32)bmp280Cal.dig_T3))>>14;
bmp280Cal.t_fine=var1+var2;
T=(bmp280Cal.t_fine*5+128)>>8;
return T;
}
static uint32_t bmp280CompensateP(s32 adcP)
{
int64_t var1,var2,p;
var1=((int64_t)bmp280Cal.t_fine)-128000;
var2=var1*var1*(int64_t)bmp280Cal.dig_P6;
var2=var2+((var1*(int64_t)bmp280Cal.dig_P5)<<17);
var2=var2+(((int64_t)bmp280Cal.dig_P4)<<35);
var1=((var1*var1*(int64_t)bmp280Cal.dig_P3)>>8)+((var1*(int64_t)bmp280Cal.dig_P2)<<12);
var1=(((((int64_t)1)<<47)+var1))*((int64_t)bmp280Cal.dig_P1)>>33;
if (var1==0)
return 0;
p=1048576-adcP;
p=(((p<<31)-var2)*3125)/var1;
var1=(((int64_t)bmp280Cal.dig_P9)*(p>>13)*(p>>13))>>25;
var2=(((int64_t)bmp280Cal.dig_P8)*p)>>19;
p=((p+var1+var2)>>8)+(((int64_t)bmp280Cal.dig_P7)<<4);
return(uint32_t)p;
}
#define FILTER_NUM 5
#define FILTER_A 0.1f
static void presssureFilter(float* in,float* out)
{
static u8 i=0;
static float filter_buf[FILTER_NUM]={0.0};
double filter_sum=0.0;
u8 cnt=0;
float deta;
if(filter_buf[i]==0.0f)
{
filter_buf[i]=*in;
*out=*in;
if(++i>=FILTER_NUM)
i=0;
}
else
{
if(i)
deta=*in-filter_buf[i-1];
else
deta=*in-filter_buf[FILTER_NUM-1];
if(fabs(deta)<FILTER_A)
{
filter_buf[i]=*in;
if(++i>=FILTER_NUM)
i=0;
}
for(cnt=0;cnt<FILTER_NUM;cnt++)
{
filter_sum+=filter_buf[cnt];
}
*out=filter_sum /FILTER_NUM;
}
}
void bmp280GetData(float* pressure,float* temperature,float* asl)
{
static float t;
static float p;
bmp280GetPressure();
t=bmp280CompensateT(bmp280RawTemperature)/100.0;
p=bmp280CompensateP(bmp280RawPressure)/25600.0;
presssureFilter(&p,pressure);
*temperature=(float)t;
*asl=bmp280PressureToAltitude(pressure);
}
#define CONST_PF 0.1902630958
#define FIX_TEMP 25
static float bmp280PressureToAltitude(float* pressure)
{
if (*pressure>0)
{
return((pow((1015.7f/ *pressure),CONST_PF)-1.0f)*(FIX_TEMP+273.15f))/0.0065f;
}
else
{
return 0;
}
}
BMP280.H
#ifndef __BMP280_H
#define __BMP280_H
#include "sys.h"
#include "stdbool.h"
#include <math.h>
#include "delay.h"
#include "usart.h"
#define BMP280_ADDR (0xEC)
#define BMP280_DEFAULT_CHIP_ID (0x58)
#define BMP280_CHIP_ID (0xD0)
#define BMP280_RST_REG (0xE0)
#define BMP280_STAT_REG (0xF3)
#define BMP280_CTRL_MEAS_REG (0xF4)
#define BMP280_CONFIG_REG (0xF5)
#define BMP280_PRESSURE_MSB_REG (0xF7)
#define BMP280_PRESSURE_LSB_REG (0xF8)
#define BMP280_PRESSURE_XLSB_REG (0xF9)
#define BMP280_TEMPERATURE_MSB_REG (0xFA)
#define BMP280_TEMPERATURE_LSB_REG (0xFB)
#define BMP280_TEMPERATURE_XLSB_REG (0xFC)
#define BMP280_SLEEP_MODE (0x00)
#define BMP280_FORCED_MODE (0x01)
#define BMP280_NORMAL_MODE (0x03)
#define BMP280_TEMPERATURE_CALIB_DIG_T1_LSB_REG (0x88)
#define BMP280_PRESSURE_TEMPERATURE_CALIB_DATA_LENGTH (24)
#define BMP280_DATA_FRAME_SIZE (6)
#define BMP280_OVERSAMP_SKIPPED (0x00)
#define BMP280_OVERSAMP_1X (0x01)
#define BMP280_OVERSAMP_2X (0x02)
#define BMP280_OVERSAMP_4X (0x03)
#define BMP280_OVERSAMP_8X (0x04)
#define BMP280_OVERSAMP_16X (0x05)
bool bmp280Init(void);
void bmp280GetData(float* pressure, float* temperature, float* asl);
#define SDA_IN() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=8<<12;}
#define SDA_OUT() {GPIOC->CRH&=0XFFFF0FFF;GPIOC->CRH|=3<<12;}
#define IIC_SCL PCout(12)
#define IIC_SDA PCout(11)
#define READ_SDA PCin(11)
void BMP_IIC_Init(void);
void BMP_IIC_Start(void);
void BMP_IIC_Stop(void);
void BMP_IIC_Send_Byte(u8 txd);
u8 BMP_IIC_Read_Byte(unsigned char ack);
u8 BMP_IIC_Wait_Ack(void);
void BMP_IIC_Ack(void);
void BMP_IIC_NAck(void);
void BMP_IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);
u8 BMP_IIC_Read_One_Byte(u8 daddr,u8 addr);
u8 BMP_iicDevReadByte(u8 devaddr,u8 addr);
void BMP_iicDevWriteByte(u8 devaddr,u8 addr,u8 data);
void BMP_iicDevRead(u8 devaddr,u8 addr,u8 len,u8 *rbuf);
void BMP_iicDevWrite(u8 devaddr,u8 addr,u8 len,u8 *wbuf);
#endif
MAIN.C
#include "sys.h"
#include "delay.h"
#include "USART.H"
#include "timer.h"
#include "adc.h"
#include <math.h>
#include "wdg.h"
#include "led.h"
#include "LCD.H"
#include "QDTFT_demo.h"
#include "Picture.h"
#include "key.h"
#include "oled.h"
#include "beep.h"
#include "dht11.h"
#include "bh1750.h"
#include "syn6288.h"
#include "AHT10.H"
#include "bmp280.h"
#include "gizwits_product.h"
unsigned short MQ135_ADC,MQ2_ADC,MQ4_ADC,MQ7_ADC;
float temp1,temp2,temp3,temp4,MQ135_quality,MQ2_quality,MQ4_quality,MQ7_quality,Light;
extern u8 DHT11_Temp,DHT11_Hum;
float aht_temp,aht_hum;
unsigned int time1 =0;
unsigned int timeCount1=0;
unsigned int timeflag1 =0;
unsigned int time2 =0;
unsigned int timeCount2=0;
unsigned int timeflag2 =0;
unsigned int time3 =0;
unsigned int timeCount3=0;
unsigned int timeflag3 =0;
unsigned int time4 =0;
unsigned int timeCount4=0;
unsigned int timeflag4 =0;
unsigned int Basictime =0;
unsigned int BasictimeCount=0;
unsigned int Basictimeflag =0;
unsigned char IC_Card[4]={0};
void LED_TEST(void);
void Hareware_Iint(void);
void TFT_ShowTEST(void);
void Usart_Test(void);
void oled_test(void);
void Timer_Configure(void);
void GeneralTimer_Test(void);
void Basic_Timer_Test(void);
void Basic_GeneralTimer_Test(void);
void USart_Configure(void);
void DHT11_DisPlay(void);
void Gas_sensorGet_Data(void);
void IWdg_Test(void);
void LED_PWM_Test(void);
void BH1750_Test(void);
void Gizwits_Init(void);
void RFID_Test(void);
void PWM_Test(void);
void Hareware_Iint(void)
{
delay_init();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
USART1_Configuration(115200);
LED_Init();
KEY_Init();
DHT11_Init();
AHT_I2C_UserConfig();
OLED_Init();
Lcd_Init();
LCD_LED_SET;
Lcd_Clear(WHITE);
BEEP_Init();
BH1750_Init();
Adc_Init();
BMP_IIC_Init();
bmp280Init();
Gizwits_Init();
#if 0
IWDG_Init(4,625);
WWDG_Init(0X7F,0X5F,WWDG_Prescaler_8);
#endif
}
void LED_TEST(void)
{
LED0=0;
delay_ms(500);
LED0=1;
delay_ms(500);
LED1=0;
delay_ms(500);
LED1=1;
delay_ms(500);
}
void TFT_ShowTEST(void)
{
Num_Test();
Color_Test();
Lcd_Clear(WHITE);
TFT_ShowString_16x16(0,16,"stm32 vscode",Red,White);
delay_ms(1000);
TFT_ShowNumber_SignedInteger_16x16(16,32,1234,5,Red,White);
delay_ms(1000);
TFT_ShowNumber_Float_16x16(0,48,123.56,4,3,Red,White);
delay_ms(1000);
TFT_ShowString_16x16(16,60,"By 2021-01-29",Red,White);
delay_ms(1000);
TFT_ShowString_16x16(0,90,"keil5 vscode",Red,White);
delay_ms(1000);
}
void USart_Configure(void)
{
}
void Usart_Test(void)
{
#if 0
UART_SendString(USART1,"usart1 test \r\n");
delay_ms(500);
TFT_ShowString_16x16(0,0,"usart1 test",Red,White);
#endif
#if 0
UART_SendString(USART2,"usart2 test \r\n");
delay_ms(500);
TFT_ShowString_16x16(0,16,"usart2 test",Red,White);
#endif
#if 0
UART_SendString(USART3,"usart3 test \r\n");
delay_ms(500);
TFT_ShowString_16x16(0,32,"usart3 test",Red,White);
#endif
#if 0
UART_SendString(UART4,"uart4 test \r\n");
delay_ms(500);
TFT_ShowString_16x16(0,48,"uart4 test",Red,White);
#endif
#if 0
UART_SendString(UART5,"uart5 test \r\n");
delay_ms(500);
TFT_ShowString_16x16(0,54,"uart5 test",Red,White);
#endif
#if 1
UART_SendNumber_SignedInteger(USART1,123,4);
UART_SendLine(USART1);
delay_ms(500);
UART_SendNumber_UnsignedInteger(USART1,123,4);
UART_SendLine(USART1);
delay_ms(500);
UART_SendNumber_Float(USART1,123.56,4,3);
UART_SendLine(USART1);
delay_ms(500);
UART_SendNumber_Binary(USART1,9,4);
UART_SendLine(USART1);
delay_ms(500);
#endif
}
void oled_test(void)
{
OLED_ShowChar_08x16(0,0,'@');
OLED_ShowChar_08x16(16,0,'&');
OLED_ShowNumber_SignedInteger_06x08(0,2,1234,5);
OLED_ShowNumber_UnsignedInteger_06x08(48,2,1234,5);
OLED_ShowNumber_Float_06x08(0,4,123.46,3,3);
OLED_ShowString_06x08(32,0,"oled");
OLED_ShowCHinese(0,6,0);
OLED_ShowCHinese(16,6,1);
OLED_ShowCHinese(32,6,2);
OLED_ShowCHinese(48,6,3);
OLED_ShowCHinese(64,6,4);
}
void Key_Test(void)
{
unsigned char key_value=0;
TFT_ShowString_16x16(0,0,"KEY:",Red,White);
key_value=KEY_Scan(0);
if(key_value==3)
{
TFT_ShowNumber_SignedInteger_16x16(60,0,key_value,2,Red,White);
}
if(key_value==2)
{
TFT_ShowNumber_SignedInteger_16x16(60,0,key_value,2,Red,White);
}
if(key_value==1)
{
TFT_ShowNumber_SignedInteger_16x16(60,0,key_value,2,Red,White);
}
}
void Timer_Configure(void)
{
BASIC_TIM_Init();
TIM5_Init(9999,7199);
TIM2_Int_Init(9999,7199);
TIM4_Int_Init(9999,7199);
}
void GeneralTimer_Test(void)
{
if ( timeflag1 == 1 )
{
timeflag1 = 0;
timeCount1++;
LED1=!LED1;
if (timeCount1 == 60)
{
timeCount1=0;
}
TFT_ShowNumber_SignedInteger_16x16(90,32,timeCount1,2,Blue1,White);
}
if ( timeflag2 == 1 )
{
timeflag2 = 0;
timeCount2++;
if (timeCount2 == 60)
{
timeCount2=0;
}
TFT_ShowNumber_SignedInteger_16x16(90,60,timeCount2,2,Blue1,White);
}
if ( timeflag3 == 1 )
{
timeflag3 = 0;
timeCount3++;
if (timeCount3 == 60)
{
timeCount3=0;
}
TFT_ShowNumber_SignedInteger_16x16(90,90,timeCount3,2,Green,White);
}
if ( timeflag4 == 1 )
{
timeflag4 = 0;
timeCount4++;
if (timeCount4 == 60)
{
timeCount4=0;
}
TFT_ShowNumber_SignedInteger_16x16(90,120,timeCount4,2,Green,White);
}
}
void Basic_Timer_Test(void)
{
if ( Basictime == 1000 )
{
Basictime = 0;
BasictimeCount++;
if (BasictimeCount == 60)
{
BasictimeCount=0;
}
TFT_ShowNumber_SignedInteger_16x16(90,140,BasictimeCount,2,Black,White);
}
}
void Basic_GeneralTimer_Test(void)
{
GeneralTimer_Test();
Basic_Timer_Test();
}
#if 0
TFT_ShowString_16x16(0,0,"stm32 timertest",Magenta,White);
TFT_ShowString_16x16(0,32,"timeCount1 ",Blue1,White);
TFT_ShowString_16x16(0,60,"timeCount2 ",Red,White);
TFT_ShowString_16x16(0,90,"timeCount3 ",Red,White);
TFT_ShowString_16x16(0,120,"timeCount4",Red,White);
TFT_ShowString_16x16(0,140,"Basictime",Magenta,White);
#endif
void DHT11_DisPlay(void)
{
TFT_ShowString_16x16(0,0,"TEMP:",Magenta,White);
TFT_ShowString_16x16(0,32,"Hum: ",Blue1,White);
DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
TFT_ShowNumber_Float_16x16(32,0,DHT11_Temp,2,1,Red,White);
TFT_ShowNumber_Float_16x16(32,32,DHT11_Hum,2,1,Green,White);
}
void Gas_sensorGet_Data(void)
{
#if 0
unsigned short MQ135_ADC,MQ2_ADC;
float temp1,temp2,MQ135_quality,MQ2_quality;
DHT11_Read_Data(&DHT11_Temp,&DHT11_Hum);
TFT_ShowString_16x16(0,0,"TEMP:",Magenta,White);
TFT_ShowString_16x16(0,16,"Hum: ",Blue1,White);
TFT_ShowString_16x16(0,32,"MQ-2:",Magenta,White);
TFT_ShowString_16x16(0,48,"MQ-135:",Blue1,White);
MQ135_ADC=Get_Adc_Average(ADC_Channel_11,10);
temp1=(float)MQ135_ADC*(3.3/4096);
MQ135_quality=pow((11.5428 * 35.904 * temp1 )/(25.5 - 5.1 * temp1),1.0/0.6549);
MQ135_ADC=temp1;
temp1-=MQ135_ADC;
MQ2_ADC = Get_Adc_Average(ADC_Channel_13,10);
temp2=(float)MQ2_ADC*(3.3/4096);
MQ2_quality = pow((11.5428 * 35.904 * temp2 )/(25.5 - 5.1 * temp2),1.0/0.6549);
MQ2_ADC=temp2;
temp2-=MQ2_ADC;
TFT_ShowNumber_Float_16x16(40,0,DHT11_Temp,2,1,Red,White);
TFT_ShowNumber_Float_16x16(40,16,DHT11_Hum,2,1,Green,White);
TFT_ShowNumber_Float_16x16(66,32,MQ2_quality,4,1,Magenta,White);
TFT_ShowNumber_Float_16x16(66,48,MQ135_quality,4,1,Magenta,White);
#endif
}
void IWdg_Test(void)
{
if(KEY_Scan(0) == WKUP_PRES )
{
IWDG_Feed();
UART_SendString(USART1,"IWDG test \r\n");
}
}
void LED_PWM_Test(void)
{
unsigned short Led0PwmVal=0;
unsigned Incordecflag=1;
if(Incordecflag)
{
Led0PwmVal++;
}
else
{
Led0PwmVal--;
}
if(Led0PwmVal > 900)
{
Incordecflag=0;
}
if(Led0PwmVal == 0)
{
Incordecflag=1;
}
TIM_SetCompare2(TIM3,Led0PwmVal);
}
void PWM_Test(void)
{
}
void Gizwits_Init(void)
{
TIM3_Int_Init(9,7199);
USART3_Configuration(9600);
userInit();
gizwitsInit();
}
int main(void)
{
unsigned char key;
float bmp280_temp;
float bmp280_press;
float high;
unsigned short Press,Temp,High;
Hareware_Iint();
AHT10_Write_Reset();
while(1)
{
userHandle();
gizwitsHandle((dataPoint_t *)¤tDataPoint);
key = KEY_Scan(0);
if(key==KEY1_PRES)
{
printf("WIFI进入AirLink连接模式\r\n");
gizwitsSetMode(WIFI_AIRLINK_MODE);
}
if(key==WKUP_PRES)
{
printf("WIFI复位,请重新配置连接\r\n");
gizwitsSetMode(WIFI_RESET_MODE);
}
TFT_ShowImage(0,120,32,32,LED_IMG);
TFT_ShowString_16x16(32,140,":",Magenta,White);
TFT_ShowString_16x16(40,140,LED0 == 0?"On ":"Off",Red,White);
AHT10_Read_Humi_Temp(&aht_hum,&aht_temp);
if (!i2c_CheckDevice(BH1750_Addr))
{
Light = LIght_Intensity();
}
TFT_ShowString_16x16(0,0,"Temp",Magenta,White);
TFT_ShowImage(36,0,32,32,IMG_Wendu);
TFT_ShowNumber_Float_16x16(64,0,aht_temp,2,1,Red,White);
TFT_ShowString_16x16(110,0,"C",Magenta,White);
TFT_ShowString_16x16(0,32,"Hum",Magenta,White);
TFT_ShowImage(24,32,32,32,shidu);
TFT_ShowNumber_Float_16x16(64,32,aht_hum,2,1,Red,White);
TFT_ShowString_16x16(110,32,"%",Magenta,White);
TFT_ShowImage(0,64,32,32,Light_IMG);
TFT_ShowNumber_Float_16x16(32,64,Light,5,1,Red,White);
TFT_ShowString_16x16(100,64,"lx",Magenta,White);
bmp280GetData(&bmp280_press,&bmp280_temp,&high);
delay_ms(500);
Press=bmp280_press;
Temp=bmp280_temp;
High=high;
printf("bmp280_press:%d\r\n",Press);
delay_ms(100);
printf("bmp280_temp :%d\r\n\r\n",Temp);
delay_ms(100);
printf("bmp280_high :%d\r\n\r\n",High);
delay_ms(100);
}
}
效果
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)