BNO055数据读取之二:USART

BNO055支持串口及IIC通信两种通信模式,本文介绍单片机串口与BNO055通信。

本文完整keil工程下载链接:BNO055+STM32F429串口读取数据-嵌入式文档类资源-CSDN下载

IIC通信文章链接:BNO055数据读取之一:IIC_pwbhbh的博客-CSDN博客

BNO055的串口通信设置比较简单,参考手册资料:波特率115200,8位数据位,1位停止位,无校验,都是常见的串口配置。手册对读、写命令、数据返回、错误返回有着明确说明,就不再赘述了。

 代码编写:

1、首先基于stm32F429建立一个串口通信工程,我的是基于标准库的。

2、编写bno055的初始化、数据读取代码:

bno055_api.c内主要为bno055的初始化函数  BNO055_Init()

三组传感器数据读取函数:

Read_BNO005_ACC(struct bno055_accel_t* acc)

Read_BNO005_MAG(struct bno055_mag_t* mag)

void Read_BNO005_GYRO(struct bno055_gyro_t* gyro)

bno055_api.c:

#include "bno055_api.h"
#include "bno055_usart.h"
#include "delay.h"

struct bno055_gyro_t gyroData;
struct bno055_accel_t accData;

u8 Read_Cmd[4]={0xAA,0x01,0,6};
u8 Write_Cmd[5]={0xAA,0x00,0x00,0x01,0x00};

#define Writereg	Write_Cmd[2]
#define Writedat	Write_Cmd[4]

struct bno055_accel_t ACC;
struct bno055_mag_t MAG;
struct bno055_gyro_t GYRO;

void Read_BNO005_ACC(struct bno055_accel_t* acc)
{
	Read_Cmd[2] = BNO055_ACCEL_DATA_X_LSB_ADDR;
	BNO055_USART_Send_length(Read_Cmd,4);
	delay_ms(100);
	if(BNO055_USART_REC_LEN)
	{
		if(BNO055_USART_REC[0]==0xBB)
		{
			acc->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
			acc->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
			acc->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
			printf("ACC:X=%d,Y=%d,Z=%d\r\n",acc->x,acc->y,acc->z);
			
		}
		BNO055_USART_REC_LEN = 0;
	}
}

void Read_BNO005_MAG(struct bno055_mag_t* mag)
{
	Read_Cmd[2] = BNO055_MAG_DATA_X_LSB_ADDR;
	BNO055_USART_Send_length(Read_Cmd,4);
	delay_ms(100);
	if(BNO055_USART_REC_LEN)
	{
		if(BNO055_USART_REC[0]==0xBB)
		{
			mag->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
			mag->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
			mag->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
			printf("MAG:X=%d,Y=%d,Z=%d\r\n",mag->x,mag->y,mag->z);
			
		}
		BNO055_USART_REC_LEN = 0;
	}
}

void Read_BNO005_GYRO(struct bno055_gyro_t* gyro)
{
	Read_Cmd[2] = BNO055_ACCEL_DATA_X_LSB_ADDR;
	BNO055_USART_Send_length(Read_Cmd,4);
	delay_ms(100);
	if(BNO055_USART_REC_LEN)
	{
		if(BNO055_USART_REC[0]==0xBB)
		{
			gyro->x = BNO055_USART_REC[3]<<8 | BNO055_USART_REC[2];
			gyro->y = BNO055_USART_REC[5]<<8 | BNO055_USART_REC[4];
			gyro->z = BNO055_USART_REC[7]<<8 | BNO055_USART_REC[6];
			printf("GYR:X=%d,Y=%d,Z=%d\r\n",gyro->x,gyro->y,gyro->z);
			
		}
		BNO055_USART_REC_LEN = 0;
	}
}

void BNOPrint(void)
{
	delay_ms(300);			//ÑÓʱʱ¼ä½÷É÷ÐÞ¸Ä
	if(BNO055_USART_REC_LEN)
	{
		for(u8 i = 0; i < BNO055_USART_REC_LEN; i++)
		printf("%02X ",BNO055_USART_REC[i]);
		printf("\r\n");
		BNO055_USART_REC_LEN = 0;
	}
}

void BNO055_Init(void)
{
	BNO055_USART_Config();					//ÅäÖô®¿Ú
	
	Writereg = BNO055_SYS_TRIGGER_ADDR;		//¸´Î»
	Writedat = BNO055_SYS_RST;
	BNO055_USART_Send_length(Write_Cmd,5);
	delay_ms(500);
	BNOPrint();
	Writereg = BNO055_OPR_MODE_ADDR;		//½øÈëÅäÖÃģʽ
	Writedat = BNO055_OPERATION_MODE_CONFIG;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	
//ÅäÖù¤×÷ģʽ	
	Writereg = BNO055_PAGE_ID_ADDR;			//page id
	Writedat = BNO055_PAGE_0;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	
	Writereg = BNO055_PWR_MODE_ADDR;		//power mode
	Writedat = BNO055_POWER_MODE_NORMAL;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();	
	
	Writereg = BNO055_SYS_TRIGGER_ADDR;		//sys trigger id
	Writedat = BNO055_INTR_NORST;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
		
//ÅäÖüĴæÆ÷
	Writereg = BNO055_PAGE_ID_ADDR;			//page id
	Writedat = BNO055_PAGE_1;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	
	Writereg = BNO055_ACCEL_CONFIG_ADDR;	//ACC config
	Writedat = BNO055_ACCEL_RANGE_4G;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	
	Writereg = BNO055_MAG_CONFIG_ADDR;		//Mag config
	Writedat = BNO055_MAG_DATA_OUTRATE_20HZ;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	
	Writereg = BNO055_GYRO_CONFIG_ADDR;		//GYRO config
	Writedat = BNO055_GYRO_RANGE_2000DPS;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	Writereg = BNO055_GYRO_MODE_CONFIG_ADDR;//GYRO config
	Writedat = BNO055_GYRO_POWER_MODE_NORMAL;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();	
	
	Writereg = BNO055_PAGE_ID_ADDR;			//page id
	Writedat = BNO055_PAGE_0;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();
	Writereg = BNO055_OPR_MODE_ADDR;		//opration_mode
	Writedat = BNO055_OPERATION_MODE_NDOF;
	BNO055_USART_Send_length(Write_Cmd,5);
	BNOPrint();		
}






bno055_api.h

#ifndef __BNO055_API_H
#define	__BNO055_API_H
#include "sys.h"
/* PAGE0 CONFIG REGISTERS START*/
/* Page id register definition and Value*/
#define BNO055_PAGE_ID_ADDR                 (0X07)
#define BNO055_PAGE_0                			   (0X00)
#define BNO055_PAGE_1                			   (0X01)

/* PWR_Mode registers and Value*/
#define BNO055_PWR_MODE_ADDR                (0X3E)
#define BNO055_POWER_MODE_NORMAL        	       (0X00)
#define BNO055_POWER_MODE_LOWPOWER      	       (0X01)
#define BNO055_POWER_MODE_SUSPEND        	       (0X02)

/* OPR_Mode registers and Value*/
#define BNO055_OPR_MODE_ADDR                (0X3D)
#define BNO055_OPERATION_MODE_CONFIG               (0X00)
#define BNO055_OPERATION_MODE_ACCONLY              (0X01)
#define BNO055_OPERATION_MODE_MAGONLY              (0X02)
#define BNO055_OPERATION_MODE_GYRONLY              (0X03)
#define BNO055_OPERATION_MODE_ACCMAG               (0X04)
#define BNO055_OPERATION_MODE_ACCGYRO              (0X05)
#define BNO055_OPERATION_MODE_MAGGYRO              (0X06)
#define BNO055_OPERATION_MODE_AMG                  (0X07)
#define BNO055_OPERATION_MODE_IMUPLUS              (0X08)
#define BNO055_OPERATION_MODE_COMPASS              (0X09)
#define BNO055_OPERATION_MODE_M4G                  (0X0A)
#define BNO055_OPERATION_MODE_NDOF_FMC_OFF         (0X0B)
#define BNO055_OPERATION_MODE_NDOF                 (0X0C)

/* SYS_TRIGGER registers and Value*/
#define BNO055_SYS_TRIGGER_ADDR             (0X3F)
#define BNO055_SYS_RST              		       (0X20)
#define BNO055_INTR_RST          			       (0X40)
#define BNO055_INTR_NORST          			       (0X00)

/* Unit selection register  and Value*/
#define BNO055_UNIT_SEL_ADDR                (0X3B)
/*Accel unit*/
#define BNO055_ACCEL_UNIT_MSQ                      (0x00)
#define BNO055_ACCEL_UNIT_MG                       (0x01)
/*Gyro unit*/
#define BNO055_GYRO_UNIT_DPS                       (0x00)
#define BNO055_GYRO_UNIT_RPS                       (0x02)
/* Euler unit*/
#define BNO055_EULER_UNIT_DEG                      (0x00)
#define BNO055_EULER_UNIT_RAD                      (0x04)
/*Temperature unit*/
#define BNO055_TEMP_UNIT_CELSIUS                   (0x00)
#define BNO055_TEMP_UNIT_FAHRENHEIT                (0x10)

/* TEMP_SOURCE register  and Value*/
#define BNO055_TEMP_SOURCE_ADDR             (0X40)
/* Enable the temperature source */
#define BNO055_ACCEL_TEMP_EN                       (0x00)
#define BNO055_GYRO_TEMP_EN                        (0x01)
#define BNO055_MCU_TEMP_EN                         (0x03)
/* PAGE0 REGISTERS DEFINITION END*/


/* PAGE1 CONFIG REGISTERS DEFINITION*/
/* ACCEL CONFIG register  and Value*/
#define BNO055_ACCEL_CONFIG_ADDR            (0X08)
/* Accel Range */
#define BNO055_ACCEL_RANGE_2G                      (0X00)
#define BNO055_ACCEL_RANGE_4G                      (0X01)
#define BNO055_ACCEL_RANGE_8G                      (0X02)
#define BNO055_ACCEL_RANGE_16G                     (0X03)
/* Accel Bandwidth*/
#define BNO055_ACCEL_BW_7_81HZ                     (0x00 << 2)
#define BNO055_ACCEL_BW_15_63HZ                    (0x01 << 2)
#define BNO055_ACCEL_BW_31_25HZ                    (0x02 << 2)
#define BNO055_ACCEL_BW_62_5HZ                     (0X03 << 2)
#define BNO055_ACCEL_BW_125HZ                      (0X04 << 2)
#define BNO055_ACCEL_BW_250HZ                      (0X05 << 2)
#define BNO055_ACCEL_BW_500HZ                      (0X06 << 2)
#define BNO055_ACCEL_BW_1000HZ                     (0X07 << 2)
/* Accel Power mode*/
#define BNO055_ACCEL_NORMAL                        (0X00 << 5)
#define BNO055_ACCEL_SUSPEND                       (0X01 << 5)
#define BNO055_ACCEL_LOWPOWER_1                    (0X02 << 5)
#define BNO055_ACCEL_STANDBY                       (0X03 << 5)
#define BNO055_ACCEL_LOWPOWER_2                    (0X04 << 5)
#define BNO055_ACCEL_DEEPSUSPEND                   (0X05 << 5)


/* MAG CONFIG register  and Value*/
#define BNO055_MAG_CONFIG_ADDR              (0X09)
/* Mag data output rate*/
#define BNO055_MAG_DATA_OUTRATE_2HZ                (0X00)
#define BNO055_MAG_DATA_OUTRATE_6HZ                (0X01)
#define BNO055_MAG_DATA_OUTRATE_8HZ                (0X02)
#define BNO055_MAG_DATA_OUTRATE_10HZ               (0X03)
#define BNO055_MAG_DATA_OUTRATE_15HZ               (0X04)
#define BNO055_MAG_DATA_OUTRATE_20HZ               (0X05)
#define BNO055_MAG_DATA_OUTRATE_25HZ               (0X06)
#define BNO055_MAG_DATA_OUTRATE_30HZ               (0X07)
/* Mag Operation mode*/
#define BNO055_MAG_OPERATION_MODE_LOWPOWER         (0X00 << 3)
#define BNO055_MAG_OPERATION_MODE_REGULAR          (0X01 << 3)
#define BNO055_MAG_OPERATION_MODE_ENHANCED_REGULAR (0X02 << 3)
#define BNO055_MAG_OPERATION_MODE_HIGH_ACCURACY    (0X03 << 3)
/* Mag power mode*/
#define BNO055_MAG_POWER_MODE_NORMAL               (0X00 << 5)
#define BNO055_MAG_POWER_MODE_SLEEP                (0X01 << 5)
#define BNO055_MAG_POWER_MODE_SUSPEND              (0X02 << 5)
#define BNO055_MAG_POWER_MODE_FORCE_MODE           (0X03 << 5)


/* GYRO CONFIG register0  and Value*/
#define BNO055_GYRO_CONFIG_ADDR             (0X0A)
/* Gyro range*/
#define BNO055_GYRO_RANGE_2000DPS                  (0x00)
#define BNO055_GYRO_RANGE_1000DPS                  (0x01)
#define BNO055_GYRO_RANGE_500DPS                   (0x02)
#define BNO055_GYRO_RANGE_250DPS                   (0x03)
#define BNO055_GYRO_RANGE_125DPS                   (0x04)
/* Gyro Bandwidth*/
#define BNO055_GYRO_BW_523HZ                       (0x00 << 3)
#define BNO055_GYRO_BW_230HZ                       (0x01 << 3)
#define BNO055_GYRO_BW_116HZ                       (0x02 << 3)
#define BNO055_GYRO_BW_47HZ                        (0x03 << 3)
#define BNO055_GYRO_BW_23HZ                        (0x04 << 3)
#define BNO055_GYRO_BW_12HZ                        (0x05 << 3)
#define BNO055_GYRO_BW_64HZ                        (0x06 << 3)
#define BNO055_GYRO_BW_32HZ                        (0x07 << 3)

/* GYRO CONFIG register1  and Value*/
#define BNO055_GYRO_MODE_CONFIG_ADDR        (0X0B)
/* Gyro power mode*/
#define BNO055_GYRO_POWER_MODE_NORMAL              (0X00)
#define BNO055_GYRO_POWER_MODE_FASTPOWERUP         (0X01)
#define BNO055_GYRO_POWER_MODE_DEEPSUSPEND         (0X02)
#define BNO055_GYRO_POWER_MODE_SUSPEND             (0X03)
#define BNO055_GYRO_POWER_MODE_ADVANCE_POWERSAVE   (0X04)

/* ACC_SLEEP CONFIG register1  and Value*/
#define BNO055_ACCEL_SLEEP_CONFIG_ADDR      (0X0C)
#define BNO055_ACCEL_SLEEP_MODE_EVENT              (0X00)
#define BNO055_ACCEL_SLEEP_MODE_EQUI               (0X01)
/* Accel Sleep Duration */
#define BNO055_ACCEL_SLEEP_DURN_0_5MS              (0x05 << 1)
/* sets sleep duration to 0.5 ms  */
#define BNO055_ACCEL_SLEEP_DURN_1MS                (0x06 << 1)
/* sets sleep duration to 1 ms */
#define BNO055_ACCEL_SLEEP_DURN_2MS                (0x07 << 1)
/* sets sleep duration to 2 ms */
#define BNO055_ACCEL_SLEEP_DURN_4MS                (0x08 << 1)
/* sets sleep duration to 4 ms */
#define BNO055_ACCEL_SLEEP_DURN_6MS                (0x09 << 1)
/* sets sleep duration to 6 ms*/
#define BNO055_ACCEL_SLEEP_DURN_10MS               (0x0A << 1)
/* sets sleep duration to 10 ms */
#define BNO055_ACCEL_SLEEP_DURN_25MS               (0x0B << 1)
/* sets sleep duration to 25 ms */
#define BNO055_ACCEL_SLEEP_DURN_50MS               (0x0C << 1)
/* sets sleep duration to 50 ms */
#define BNO055_ACCEL_SLEEP_DURN_100MS              (0x0D << 1)
/* sets sleep duration to 100 ms */
#define BNO055_ACCEL_SLEEP_DURN_500MS              (0x0E << 1)
/* sets sleep duration to 500 ms */
#define BNO055_ACCEL_SLEEP_DURN_1S                 (0x0F << 1)

/* GYRO_SLEEP CONFIG register1  and Value*/
#define BNO055_GYRO_SLEEP_CONFIG_ADDR       (0X0D)
#define BNO055_GYRO_No_AUTOSLPDUR                  (0x00 << 3)
#define BNO055_GYRO_4MS_AUTOSLPDUR                 (0x01 << 3)
#define BNO055_GYRO_5MS_AUTOSLPDUR                 (0x02 << 3)
#define BNO055_GYRO_8MS_AUTOSLPDUR                 (0x03 << 3)
#define BNO055_GYRO_10MS_AUTOSLPDUR                (0x04 << 3)
#define BNO055_GYRO_15MS_AUTOSLPDUR                (0x05 << 3)
#define BNO055_GYRO_20MS_AUTOSLPDUR                (0x06 << 3)
#define BNO055_GYRO_40MS_AUTOSLPDUR                (0x07 << 3)

/* Interrupt registers*/
#define BNO055_INT_MASK_ADDR                (0X0F)
#define BNO055_INT_ADDR                     (0X10)
#define BNO055_ACCEL_ANY_MOTION_THRES_ADDR  (0X11)
#define BNO055_ACCEL_INTR_SETTINGS_ADDR     (0X12)
#define BNO055_ACCEL_HIGH_G_DURN_ADDR       (0X13)
#define BNO055_ACCEL_HIGH_G_THRES_ADDR      (0X14)
#define BNO055_ACCEL_NO_MOTION_THRES_ADDR   (0X15)
#define BNO055_ACCEL_NO_MOTION_SET_ADDR     (0X16)
#define BNO055_GYRO_INTR_SETING_ADDR        (0X17)
#define BNO055_GYRO_HIGHRATE_X_SET_ADDR     (0X18)
#define BNO055_GYRO_DURN_X_ADDR             (0X19)
#define BNO055_GYRO_HIGHRATE_Y_SET_ADDR     (0X1A)
#define BNO055_GYRO_DURN_Y_ADDR             (0X1B)
#define BNO055_GYRO_HIGHRATE_Z_SET_ADDR     (0X1C)
#define BNO055_GYRO_DURN_Z_ADDR             (0X1D)
#define BNO055_GYRO_ANY_MOTION_THRES_ADDR   (0X1E)
#define BNO055_GYRO_ANY_MOTION_SET_ADDR     (0X1F)




/* PAGE0 REGISTER DEFINITION START*/
#define BNO055_CHIP_ID_ADDR                 (0x00)
#define BNO055_ACCEL_REV_ID_ADDR            (0x01)
#define BNO055_MAG_REV_ID_ADDR              (0x02)
#define BNO055_GYRO_REV_ID_ADDR             (0x03)
#define BNO055_SW_REV_ID_LSB_ADDR           (0x04)
#define BNO055_SW_REV_ID_MSB_ADDR           (0x05)
#define BNO055_BL_REV_ID_ADDR               (0X06)

/* Accel data register*/
#define BNO055_ACCEL_DATA_X_LSB_ADDR        (0X08)
#define BNO055_ACCEL_DATA_X_MSB_ADDR        (0X09)
#define BNO055_ACCEL_DATA_Y_LSB_ADDR        (0X0A)
#define BNO055_ACCEL_DATA_Y_MSB_ADDR        (0X0B)
#define BNO055_ACCEL_DATA_Z_LSB_ADDR        (0X0C)
#define BNO055_ACCEL_DATA_Z_MSB_ADDR        (0X0D)

/*Mag data register*/
#define BNO055_MAG_DATA_X_LSB_ADDR          (0X0E)
#define BNO055_MAG_DATA_X_MSB_ADDR          (0X0F)
#define BNO055_MAG_DATA_Y_LSB_ADDR          (0X10)
#define BNO055_MAG_DATA_Y_MSB_ADDR          (0X11)
#define BNO055_MAG_DATA_Z_LSB_ADDR          (0X12)
#define BNO055_MAG_DATA_Z_MSB_ADDR          (0X13)

/*Gyro data registers*/
#define BNO055_GYRO_DATA_X_LSB_ADDR         (0X14)
#define BNO055_GYRO_DATA_X_MSB_ADDR         (0X15)
#define BNO055_GYRO_DATA_Y_LSB_ADDR         (0X16)
#define BNO055_GYRO_DATA_Y_MSB_ADDR         (0X17)
#define BNO055_GYRO_DATA_Z_LSB_ADDR         (0X18)
#define BNO055_GYRO_DATA_Z_MSB_ADDR         (0X19)

/*Euler data registers*/
#define BNO055_EULER_H_LSB_ADDR             (0X1A)
#define BNO055_EULER_H_MSB_ADDR             (0X1B)

#define BNO055_EULER_R_LSB_ADDR             (0X1C)
#define BNO055_EULER_R_MSB_ADDR             (0X1D)

#define BNO055_EULER_P_LSB_ADDR             (0X1E)
#define BNO055_EULER_P_MSB_ADDR             (0X1F)

/*Quaternion data registers*/
#define BNO055_QUATERNION_DATA_W_LSB_ADDR   (0X20)
#define BNO055_QUATERNION_DATA_W_MSB_ADDR   (0X21)
#define BNO055_QUATERNION_DATA_X_LSB_ADDR   (0X22)
#define BNO055_QUATERNION_DATA_X_MSB_ADDR   (0X23)
#define BNO055_QUATERNION_DATA_Y_LSB_ADDR   (0X24)
#define BNO055_QUATERNION_DATA_Y_MSB_ADDR   (0X25)
#define BNO055_QUATERNION_DATA_Z_LSB_ADDR   (0X26)
#define BNO055_QUATERNION_DATA_Z_MSB_ADDR   (0X27)

/* Linear acceleration data registers*/
#define BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR (0X28)
#define BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR (0X29)
#define BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR (0X2A)
#define BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR (0X2B)
#define BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR (0X2C)
#define BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR (0X2D)

/*Gravity data registers*/
#define BNO055_GRAVITY_DATA_X_LSB_ADDR      (0X2E)
#define BNO055_GRAVITY_DATA_X_MSB_ADDR      (0X2F)
#define BNO055_GRAVITY_DATA_Y_LSB_ADDR      (0X30)
#define BNO055_GRAVITY_DATA_Y_MSB_ADDR      (0X31)
#define BNO055_GRAVITY_DATA_Z_LSB_ADDR      (0X32)
#define BNO055_GRAVITY_DATA_Z_MSB_ADDR      (0X33)

/* Temperature data register*/
#define BNO055_TEMP_ADDR                    (0X34)

/* Status registers*/
#define BNO055_CALIB_STAT_ADDR              (0X35)
#define BNO055_SELFTEST_RESULT_ADDR         (0X36)
#define BNO055_INTR_STAT_ADDR               (0X37)
#define BNO055_SYS_CLK_STAT_ADDR            (0X38)
#define BNO055_SYS_STAT_ADDR                (0X39)
#define BNO055_SYS_ERR_ADDR                 (0X3A)

/* Unit selection register*/
#define BNO055_UNIT_SEL_ADDR                (0X3B)
#define BNO055_DATA_SELECT_ADDR             (0X3C)

/* Mode registers*/
#define BNO055_OPR_MODE_ADDR                (0X3D)
#define BNO055_PWR_MODE_ADDR                (0X3E)

#define BNO055_SYS_TRIGGER_ADDR             (0X3F)
#define BNO055_TEMP_SOURCE_ADDR             (0X40)

/* Axis remap registers*/
#define BNO055_AXIS_MAP_CONFIG_ADDR         (0X41)
#define BNO055_AXIS_MAP_SIGN_ADDR           (0X42)

/* Radius registers*/
#define BNO055_ACCEL_RADIUS_LSB_ADDR        (0X67)
#define BNO055_ACCEL_RADIUS_MSB_ADDR        (0X68)
#define BNO055_MAG_RADIUS_LSB_ADDR          (0X69)
#define BNO055_MAG_RADIUS_MSB_ADDR          (0X6A)

struct bno055_accel_t
{
    short x; /**< accel x data */
    short y; /**< accel y data */
    short z; /**< accel z data */
};

/*!
 * @brief struct for Mag data read from registers
 */
struct bno055_mag_t
{
    short x; /**< mag x data */
    short y; /**< mag y data */
    short z; /**< mag z data */
};

/*!
 * @brief struct for Gyro data read from registers
 */
struct bno055_gyro_t
{
    short x; /**< gyro x data */
    short y; /**< gyro y data */
    short z; /**< gyro z data */
};

/*!
 * @brief struct for Euler data read from registers
 */
struct bno055_euler_t
{
    short h; /**< Euler h data */
    short r; /**< Euler r data */
    short p; /**< Euler p data */
};

/*!
 * @brief struct for Quaternion data read from registers
 */
struct bno055_quaternion_t
{
    short w; /**< Quaternion w data */
    short x; /**< Quaternion x data */
    short y; /**< Quaternion y data */
    short z; /**< Quaternion z data */
};

/*!
 * @brief struct for Linear Accel data read from registers
 */
struct bno055_linear_accel_t
{
    short x; /**< Linear Accel x data */
    short y; /**< Linear Accel y data */
    short z; /**< Linear Accel z data */
};

/*!
 * @brief struct for Gravity data read from registers
 */
struct bno055_gravity_t
{
    short x; /**< Gravity x data */
    short y; /**< Gravity y data */
    short z; /**< Gravity z data */
};
/*!
 * @brief struct for Accel-output data of precision double
 */
struct bno055_accel_double_t
{
    double x; /**< Accel x double data */
    double y; /**< Accel y double data */
    double z; /**< Accel z double data */
};

/*!
 * @brief struct for Mag-output data of precision double
 */
struct bno055_mag_double_t
{
    double x; /**< Mag x double data */
    double y; /**< Mag y double data */
    double z; /**< Mag z double data */
};

/*!
 * @brief struct for Gyro-output data of precision double
 */
struct bno055_gyro_double_t
{
    double x; /**< Gyro x double data */
    double y; /**< Gyro y double data */
    double z; /**< Gyro z double data */
};

/*!
 * @brief struct for Euler-output data of precision double
 */
struct bno055_euler_double_t
{
    double h; /**< Euler h double data */
    double r; /**< Euler r double data */
    double p; /**< Euler p double data */
};

/*!
 * @brief struct for Linear Accel-output data of precision double
 */
struct bno055_linear_accel_double_t
{
    double x; /**< linear accel x double data */
    double y; /**< linear accel y double data */
    double z; /**< linear accel z double data */
};

/*!
 * @brief struct for Gravity-output data of precision double
 */
struct bno055_gravity_double_t
{
    double x; /**< Gravity x double data */
    double y; /**< Gravity y double data */
    double z; /**< Gravity z double data */
};

/*!
 * @brief struct for Accel-output data of precision float
 */
struct bno055_accel_float_t
{
    float x; /**< accel x float data */
    float y; /**< accel y float data */
    float z; /**< accel z float data */
};

/*!
 * @brief struct for Mag-output data of precision float
 */
struct bno055_mag_float_t
{
    float x; /**< Mag x float data */
    float y; /**< Mag y float data */
    float z; /**< Mag z float data */
};

/*!
 * @brief struct for Gyro-output data of precision float
 */
struct bno055_gyro_float_t
{
    float x; /**< Gyro x float data */
    float y; /**< Gyro y float data */
    float z; /**< Gyro z float data */
};

/*!
 * @brief struct for Euler-output data of precision float
 */
struct bno055_euler_float_t
{
    float h; /**< Euler h float data */
    float r; /**< Euler r float data */
    float p; /**< Euler p float data */
};

/*!
 * @brief struct for Linear accel-output data of precision float
 */
struct bno055_linear_accel_float_t
{
    float x; /**< Linear accel x float data */
    float y; /**< Linear accel y float data */
    float z; /**< Linear accel z float data */
};

/*!
 * @brief struct for Gravity-output data of precision float
 */
struct bno055_gravity_float_t
{
    float x; /**< Gravity x float data */
    float y; /**< Gravity y float data */
    float z; /**< Gravity z float data */
};

extern struct bno055_accel_t ACC;
extern struct bno055_mag_t MAG;
extern struct bno055_gyro_t GYRO;

void BNOPrint(void);
void BNO055_Init(void);
void Read_BNO005_ACC(struct bno055_accel_t* acc);
void Read_BNO005_MAG(struct bno055_mag_t* mag);
void Read_BNO005_GYRO(struct bno055_gyro_t* gyro);













#endif 


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值