在线时间155 小时
UID3350711
注册时间2019-9-18
NXP金币17
TA的每日心情 | 奋斗 2023-2-9 08:26 |
---|
签到天数: 661 天 连续签到: 1 天 [LV.9]以坛为家II
金牌会员
 
- 积分
- 2360
- 最后登录
- 2024-11-20
|

楼主 |
发表于 2019-11-14 23:25:00
|
显示全部楼层
本帖最后由 silvery 于 2019-11-14 23:32 编辑
今天居然能两更,还是有BUG的(设备ID搞错,然后又莫名给自己挖坑就搞久了),当初为什么要搞这种自己给自己找麻烦的工作
void get_bme280(struct bme280_data *comp_data)
{
// int8_t rslt = BME280_OK;
#ifdef USE_FORCED
/*rslt = */bme280_set_sensor_mode(BME280_FORCED_MODE, &dev);
/* Wait for the measurement to complete and print data @25Hz */
// dev.delay_ms(1500);
/*rslt = */bme280_get_sensor_data(BME280_ALL, &comp_data, &dev);
#elif USE_NORMAL
// dev.delay_ms(1500);
/*rslt = */bme280_get_sensor_data(BME280_ALL, comp_data, &dev);
#endif
/*return rslt;*/
}
void Hal_Delay(uint32_t ms)
{
SDK_DelayAtLeastUs(1000*ms);
}
void BME280_init()
{
int8_t rslt = BME280_OK;
uint8_t settings_sel;
dev.dev_id =
#if 1
BME280_I2C_ADDR_PRIM;
#else
BME280_I2C_ADDR_SEC;
#endif
dev.intf = BME280_I2C_INTF;
dev.read = user_i2c_read;
dev.write = user_i2c_write;
dev.delay_ms = Hal_Delay;
rslt = bme280_init(&dev);
if (rslt != BME280_OK)
{
// fprintf(stderr, "Failed to initialize the device (code %+d).\n", rslt);
// exit(1);
}
#ifdef USE_FORCED
dev.settings.osr_h = BME280_OVERSAMPLING_16X;
dev.settings.osr_p = BME280_OVERSAMPLING_16X;
dev.settings.osr_t = BME280_OVERSAMPLING_2X;
dev.settings.filter = BME280_FILTER_COEFF_16;
settings_sel = BME280_OSR_PRESS_SEL | BME280_OSR_TEMP_SEL | BME280_OSR_HUM_SEL | BME280_FILTER_SEL;
rslt = bme280_set_sensor_settings(settings_sel, &dev);
/*if (rslt != BME280_OK)
{
fprintf(stderr, "Failed to set sensor settings (code %+d).", rslt);
return rslt;
}*/
#elif USE_NORMAL
dev.settings.osr_h = BME280_OVERSAMPLING_16X;
dev.settings.osr_p = BME280_OVERSAMPLING_16X;
dev.settings.osr_t = BME280_OVERSAMPLING_16X;
dev.settings.filter = BME280_FILTER_COEFF_16;
dev.settings.standby_time = BME280_STANDBY_TIME_1000_MS;
/*settings_sel = BME280_OSR_PRESS_SEL;
settings_sel |= BME280_OSR_TEMP_SEL;
settings_sel |= BME280_OSR_HUM_SEL;
settings_sel |= BME280_STANDBY_SEL;
settings_sel |= BME280_FILTER_SEL;*/
settings_sel = BME280_ALL_SETTINGS_SEL;
rslt = bme280_set_sensor_settings(settings_sel, &dev);
rslt = bme280_set_sensor_mode(BME280_NORMAL_MODE, &dev);
#endif
}
#define EXAMPLE_I2C_MASTER_BASE (I2C4_BASE)
#define EXAMPLE_I2C_MASTER ((I2C_Type *)EXAMPLE_I2C_MASTER_BASE)
int8_t user_i2c_read(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
int8_t rslt = 0; // Return 0 for Success, non-zero for failure
uint8_t tmp=reg_addr;
I2C_MasterStart(EXAMPLE_I2C_MASTER, dev_id, kI2C_Write);
I2C_MasterWriteBlocking(EXAMPLE_I2C_MASTER, &tmp, 1, kI2C_TransferNoStopFlag);
I2C_MasterRepeatedStart(EXAMPLE_I2C_MASTER, dev_id, kI2C_Read);
//for(rslt=0 ; rslt < len;rslt ++ )
I2C_MasterReadBlocking(EXAMPLE_I2C_MASTER, reg_data, len, kI2C_TransferRepeatedStartFlag);
return rslt;
}
int8_t user_i2c_write(uint8_t dev_id, uint8_t reg_addr, uint8_t *reg_data, uint16_t len)
{
int8_t rslt = 0;
uint8_t tmp;
I2C_MasterStart(EXAMPLE_I2C_MASTER, dev_id, kI2C_Write);
tmp = reg_addr;
I2C_MasterWriteBlocking(EXAMPLE_I2C_MASTER, &tmp, 1, kI2C_TransferNoStopFlag);
//for(rslt=0 ; rslt < len;rslt ++ )
I2C_MasterWriteBlocking(EXAMPLE_I2C_MASTER, reg_data, len, 0);
return rslt;
}
剩下还有BME280的官方库,就不放上来了,去官网找就有了......
未完待续......(下一更二氧化碳传感器T6703) |
-
|