資源簡介
自己寫的博世BMI160驅(qū)動,功能不太全,竟供參考。(基于STM32F030)。I2C通訊初始化相關(guān)不包含在內(nèi)。

代碼片段和文件信息
#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?自動發(fā)送停止位
??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
評論
共有 條評論