• 大小: 6KB
    文件类型: .rar
    金币: 2
    下载: 1 次
    发布日期: 2021-05-29
  • 语言: 其他
  • 标签: bme280  温度  stm32  

资源简介

端口实现的IIC方式,驱动BME280,测量温度. 支持多个BME280接在不同端口. 增加前后温度变化过大的异常数据处理

资源截图

代码片段和文件信息

#include 
#include “stm32f10x.h“
#include “myconfig.h“
#include “bme280.h“
#include “myconfig.h“
#include 
#include “globalsys.h“
#include “globalval.h“
#ifdef USE_BME280_TASK
  
struct BME280_Sensor_Struct BME280_Sensor1;
struct BME280_Sensor_Struct BME280_Sensor2;
#define MAX_BME280_ERROR 30
volatile int is_reseting=0;
char reset_flag=0;

/*
 * 函数名 : IIC_ReadOneByte
 * 描述  : I2C读出一个字节数据
 * 输入  :寄存器地址
 * 返回值 :读出来的数据
 */
u8 IIC_ReadOneByte(I2C_Bit_Ops *I2C u8 dev_addr u8 reg_addr)
{   
u8 temp=0;

  IIC_Start(I2C);  
IIC_Send_Byte(I2C (dev_addr << 1));   //发送器件地址加写操作
IIC_Wait_Ack(I2C); 

  IIC_Send_Byte(I2C reg_addr);    //发送寄存器地址
IIC_Wait_Ack(I2C);

IIC_Start(I2C);        
IIC_Send_Byte(I2C  (dev_addr << 1) | 0x01);  //进入接收模式
IIC_Wait_Ack(I2C);  
temp=IIC_Read_Byte(I2C 0);    

IIC_Stop(I2C);//产生一个停止条件  

return temp;
}


/*
 * 函数名 : IIC_Write_OneBytes
 * 描述  : I2C写1个字节的内容
 * 输入  :1.I2C设备的地址 ; 2.寄存器地址 ;  4.被写的内容
 * 返回值 :无
 */
void IIC_Write_OneBytes(I2C_Bit_Ops *I2C u8 dev_addr u8 reg_addr u8 reg_data)
{
u8   ucAddr;
ucAddr = reg_addr;
IIC_Start(I2C);
IIC_Send_Byte(I2C dev_addr << 1);  
IIC_Wait_Ack(I2C);

  IIC_Send_Byte(I2C ucAddr % 256);   //发送低地址
IIC_Wait_Ack(I2C); 

IIC_Send_Byte(I2C reg_data);     //发送字节    
IIC_Wait_Ack(I2C);  

  IIC_Stop(I2C);
}

/*
 * 函数名 : IIC_Read_NBytes
 * 描述  : I2C读出N个字节的内容
 * 输入  :1.I2C设备的地址 ; 2.寄存器地址 ; 3.读出数据的数量 ;4.存储读出数据的首地址
 * 返回值 :无
 */
void IIC_Read_NBytes(I2C_Bit_Ops *I2C u8 dev_addr u8 reg_addr u8 cnt u8 *reg_data)
{  
u8 t;

for(t = 0; t < cnt ; t++)
{
*reg_data = IIC_ReadOneByte(I2C dev_addr reg_addr + t); 
reg_data++;

}




/*
 * 函数名 : IIC_Bme280_Init
 * 描述  : BME280 I2C初始化 并且读出补偿值
 * 输入  :无
 * 返回值 :无
 */
void Bme280_InitParam(struct BME280_Sensor_Struct *BME280)
{
uint8_t t_cmd;
uint8_t buf_Bme280[25]={0};
uint8_t bme280[7]={0};
uint8_t buf_H1 = 0;

/* 读取温度压力补偿值 */
IIC_Read_NBytes(BME280->I2C BME280_DEVICE_ADDR 0x88  24 buf_Bme280);

/* 读取湿度补偿值 */
IIC_Read_NBytes(BME280->I2C BME280_DEVICE_ADDR 0xE1 7 bme280);

/* 读取湿度补偿值 */
IIC_Read_NBytes(BME280->I2C BME280_DEVICE_ADDR 0xA1 1 &buf_H1);

/* 计算温度补偿值 */
BME280->Register.dig_T1 = buf_Bme280[1] << 8 | buf_Bme280[0];
BME280->Register.dig_T2 = buf_Bme280[3] << 8 | buf_Bme280[2];
BME280->Register.dig_T3 = buf_Bme280[5] << 8 | buf_Bme280[4];

/*计算压力补偿值*/
BME280->Register.dig_P1 = buf_Bme280[7] << 8 | buf_Bme280[6];
BME280->Register.dig_P2 = buf_Bme280[9] << 8 | buf_Bme280[8];
BME280->Register.dig_P3 = buf_Bme280[11] << 8 | buf_Bme280[10];
BME280->Register.dig_P4 = buf_Bme280[13] << 8 | buf_Bme280[12];
BME280->Register.dig_P5 = buf_Bme280[15] << 8 | buf_Bme280[14];
BME280->Register.dig_P6 = buf_Bme280[17] << 8 | buf_Bme280[16];
BME280->Register.dig_P7 = buf_Bme280[19] << 8 | buf_Bme280[18];
BME280->Regist

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

    I.A....      1617  2019-03-28 15:34  bme280.h

    I.A....      6042  2019-01-03 15:16  bme_iic.c

    I.A....      1515  2019-01-02 14:19  bme_iic.h

    I.A....     14248  2019-03-29 11:41  bme280.c

----------- ---------  ---------- -----  ----

                23422                    4


评论

共有 条评论