• 大小: 6KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: 其他
  • 标签: 陀螺仪  BMI160  

资源简介

自己写的博世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


评论

共有 条评论