bme280是博世公司的一款温湿压传感器,它比之前的bmp085和bmp180精度提高了2到3倍,最近经过几天的研究终于把驱动写好了,使用的是stm8s的硬件IIC连接,绝对网上第一个,因为我一般写程序都喜欢网上直接移植过来,这样比较方便,但是这款bme280的C源程序网上找了个遍,根本就没有,就是搜索模拟IIC也找不到,没办法了,只能自己看手册研究了,经过几天的摸索,终于成功,现在发出来供大家参考,这绝对应该是网上首发了。
/地址宏定义***********/
#define BMP280_ADDRESS 0xEC
#define BMP280_TEMP_ADDR 0xFA
#define BMP280_PRESS_ADDR 0xF7
#define BMP280_HUMI_ADDR 0xFD
unsigned short dig_T1;
short dig_T2;
short dig_T3;
unsigned short dig_P1;
short dig_P2;
short dig_P3;
short dig_P4;
short dig_P5;
short dig_P6;
short dig_P7;
short dig_P8;
short dig_P9;
u8 dig_H1;
s16 dig_H2;
u8 dig_H3;
s16 dig_H4;
s16 dig_H5;
s8 dig_H6;
s32 t_fine;
void Delay(u32 t)
{
while(–t) ;
}
/BME280 写数据函数***************************/
void BME280_Write(u8 BME280_addr, u8 BME280_cmd)
{
I2C_GenerateSTART(ENABLE);//主机启用I2C起始位
while(!I2C_CheckEvent(I2C_EVENT_MASTER_MODE_SELECT));
I2C_Send7bitAddress(BME280_ADDRESS, I2C_DIRECTION_TX);//从机地址+发送标志位
while(!I2C_CheckEvent(I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//等待直到主机收到从应答信号
I2C_SendData(BME280_addr);//写入控制寄存器地址
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING));//等待主机发送完毕(收到从应答信号)
I2C_SendData(BME280_cmd);
while(!I2C_CheckEvent(I2C_EVENT_MASTER_BYTE_TRANSMITTING));//等待主机发送完毕(收到从应答信号)
I2C_GenerateSTOP(ENABLE);//主机启用I2C停止位
}
/