全网首发stm8s的硬件I2C读取bme280(bmp280)的C源程序

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停止位

}

/BME280读数据函数*

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值