資源簡介
端口實現的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? {
*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
- 上一篇:keil步進電機程序代碼
- 下一篇:Labview 屏幕截圖程序,全新,穩定,快速
評論
共有 條評論