资源简介
自己写的博世BMI160驱动,功能不太全,竟供参考。(基于STM32F030)。I2C通讯初始化相关不包含在内。
代码片段和文件信息
#include “BMI160.h“
#include “MCU_Driver.h“
#include “stm32f0xx_i2c.h“
#include “stm32f0xx_conf.h“
signed short acc[3] = {0};
signed short gry[3] = {0};
signed short mag[3] = {0};
uint8_t g_BMI160_Error = 0;
void BMI160_Init(void)
{
IIC_Init();
while(BMI160_ID != BMI160_CheckId());
BMI160_SetACC_Range(BMI160_ACC_Range16G);
BMI160_SetGRY_Range(BMI160_GRY_Range2000);
BMI160_SetMAG_Range(BMI160_MAG_Range50);
}
void BMI160_WriteOneByte(uint8_t WriteAddr uint8_t WriteData)
{
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_BUSY) != RESET);//IF BUSY
I2C_TransferHandling(I2C1 BMI_WRITE_ADDR 2 I2C_AutoEnd_ModeI2C_Generate_Start_Write);
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_TXIS) == RESET);//If Write OK
I2C_SendData(I2C1 WriteAddr);
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_TXIS) == RESET);//If Write OK
I2C_SendData(I2C1 WriteData);
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_STOPF) == RESET);
}
uint8_t BMI160_ReadOneByte(uint8_t ReadAddr)
{
uint8_t tmp;
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_BUSY) != RESET);//IF BUSY
I2C_TransferHandling(I2C1 BMI_WRITE_ADDR 1 I2C_SoftEnd_ModeI2C_Generate_Start_Write); //softend 自动发送停止位
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_TXIS) == RESET);//If Write OK
I2C_SendData(I2C1 ReadAddr);
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_TC) == RESET);
I2C_TransferHandling(I2C1 BMI_READ_ADDR 1 I2C_AutoEnd_Mode I2C_Generate_Start_Read);
while(I2C_GetFlagStatus(I2C1 I2C_FLAG_RXNE) == RESET);
tmp = I2C_ReceiveData(I2C1);
return tmp;
}
uint8_t BMI160_CheckId(void)
{
return BMI160_ReadOneByte(BMI_CHIPID);
}
/************************************
* BMI160_GetPMU_Status
* use BMI160_PMU_STATUS_TRANSBMI160_PMU_STATUS_TRANS(status offset) to get trans
*
**************************************/
uint8_t BMI160_GetPMU_Status(void)
{
return BMI160_ReadOneByte(BMI_PMU_STATUS);
}
/**************************************
* BMI160_SetACC_Range
*range :
* BMI160_ACC_Range2G
* BMI160_ACC_Range4G
* BMI160_ACC_Range8G
* BMI160_ACC_Range16G
******************************************/
void BMI160_SetACC_Range(uint8_t range)
{
BMI160_WriteOneByte(BMI_ACC_RANGE range);
}
/**************************************
* BMI160_SetACC_Range
*range :
* BMI160_GRY_Range2000
* BMI160_GRY_Range1000
* BMI160_GRY_Range500
* BMI160_GRY_Range250
* BMI160_GRY_Range125
******************************************/
void BMI160_SetGRY_Range(uint8_t range)
{
BMI160_WriteOneByte(BMI_GYR_RANGE range);
}
/**************************************
* BMI160_SetACC_Range
*range :
* BMI160_MAG_Range25_32
* BMI160_MAG_Range25_16
* BMI160_MAG_Range25_8
* BMI160_MAG_Range25_4
* BMI160_MAG_Range25_2
* BMI160_MAG_Range25
* BMI160_MAG_Range50
*
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 14679 2018-10-26 15:55 BMI160.c
文件 1302 2018-10-26 13:44 BMI160.h
文件 15337 2018-10-26 13:55 BMI160_prm.h
----------- --------- ---------- ----- ----
31318 3
相关资源
- iNEMO-V2LSM303DLHC(3轴加速度+3轴地磁)
- 基于四元数解算陀螺仪姿态角算法的
- 手机的加速度和陀螺仪传感器数据实
- BMI055陀螺仪硬件资料
- 三轴陀螺仪工作原理_三轴陀螺仪原理
- 评估MEMS陀螺仪信号中常见噪声源的简
- MEMS陀螺仪技术原理_三轴陀螺仪技术原
- MEMS陀螺仪原理.pdf
- STC15/STC15F2K60S2/STC15W4K32S4系列读取MPU
- 陀螺仪+加速度+卡尔曼数据融合
- icm20602六轴陀螺仪STM32驱动代码
- LSM6DS3加速度+陀螺仪中文手册
- allan方差分析.zip
- STM32F103+LSM6DSL.zip
- 蓝宙电子智能车竞赛3轴陀螺仪-3轴数
- 基于STM32的陀螺仪数据采集程序
- 利用msp430f149 采集陀螺仪数据
- PID采集加速度计与陀螺仪信号
- 陀螺仪数据分析
- GPS陀螺仪数据.xlsx
- MPU9255加速度计和陀螺仪卡尔曼滤波与
- 加速度计和陀螺仪使用及数据融合指
评论
共有 条评论