您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > mpu6050详细C语言程序
/*******************************************************************************//陀螺仪MPU6050IIC测试程序*******************************************************************************/#includestm32f10x_lib.h#includemath.h//KeillibraryGPIO_InitTypeDefGPIO_InitStructure;ErrorStatusHSEStartUpStatus;#defineucharunsignedchar#defineuintunsignedint//定义MPU6050内部地址#defineSMPLRT_DIV0x19//陀螺仪采样率,典型值:0x07(125Hz)#defineCONFIG0x1A//低通滤波频率,典型值:0x06(5Hz)#defineGYRO_CONFIG0x1B//陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)#defineACCEL_CONFIG0x1C//加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)#defineACCEL_XOUT_H0x3B#defineACCEL_XOUT_L0x3C#defineACCEL_YOUT_H0x3D#defineACCEL_YOUT_L0x3E#defineACCEL_ZOUT_H0x3F#defineACCEL_ZOUT_L0x40//#defineTEMP_OUT_H0x41//#defineTEMP_OUT_L0x42//#defineGYRO_XOUT_H0x43#defineGYRO_XOUT_L0x44#defineGYRO_YOUT_H0x45#defineGYRO_YOUT_L0x46#defineGYRO_ZOUT_H0x47#defineGYRO_ZOUT_L0x48#definePWR_MGMT_10x6B//电源管理,典型值:0x00(正常启用)//#defineWHO_AM_I0x75//IIC地址寄存器(默认数值0x68,只读)//****************************#defineMPU6050_Addr0xD0//定义器件在IIC总线中的从地址,根据ALTADDRESS地址引脚不同修改unsignedcharTX_DATA[4];//显示据缓存区unsignedcharBUF[10];//接收数据缓存区chartest=0;//IIC用到shortT_X,T_Y,T_Z,T_T;//X,Y,Z轴,温度//模拟IIC端口输出输入定义#defineSCL_HGPIOB-BSRR=GPIO_Pin_6#defineSCL_LGPIOB-BRR=GPIO_Pin_6#defineSDA_HGPIOB-BSRR=GPIO_Pin_7#defineSDA_LGPIOB-BRR=GPIO_Pin_7#defineSCL_readGPIOB-IDR&GPIO_Pin_6#defineSDA_readGPIOB-IDR&GPIO_Pin_7/*函数申明-----------------------------------------------*/voidRCC_Configuration(void);voidGPIO_Configuration(void);voidNVIC_Configuration(void);voidUSART1_Configuration(void);voidWWDG_Configuration(void);voidDelay(u32nTime);voidDelayms(vu32m);/*变量定义----------------------------------------------*//*******************************/voidDATA_printf(uchar*s,shorttemp_data){if(temp_data0){temp_data=-temp_data;*s='-';}else*s='';*++s=temp_data/100+0x30;temp_data=temp_data%100;//取余运算*++s=temp_data/10+0x30;temp_data=temp_data%10;//取余运算*++s=temp_data+0x30;}/********************************************************************************FunctionName:I2C_GPIO_Config*Description:ConfigrationSimulationIICGPIO*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_GPIO_Config(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;GPIO_Init(GPIOB,&GPIO_InitStructure);}/********************************************************************************FunctionName:I2C_delay*Description:SimulationIICTimingseriesdelay*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_delay(void){u8i=30;//这里可以优化速度,经测试最低到5还能写入while(i){i--;}}voiddelay5ms(void){inti=5000;while(i){i--;}}/********************************************************************************FunctionName:I2C_Start*Description:MasterStartSimulationIICCommunication*Input:None*Output:None*Return:WheatherStart*******************************************************************************/boolI2C_Start(void){SDA_H;SCL_H;I2C_delay();if(!SDA_read)returnFALSE;//SDA线为低电平则总线忙,退出SDA_L;I2C_delay();if(SDA_read)returnFALSE;//SDA线为高电平则总线出错,退出SDA_L;I2C_delay();returnTRUE;}/********************************************************************************FunctionName:I2C_Stop*Description:MasterStopSimulationIICCommunication*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_Stop(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SDA_H;I2C_delay();}/********************************************************************************FunctionName:I2C_Ack*Description:MasterSendAcknowledgeSingle*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_Ack(void){SCL_L;I2C_delay();SDA_L;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();}/********************************************************************************FunctionName:I2C_NoAck*Description:MasterSendNoAcknowledgeSingle*Input:None*Output:None*Return:None*******************************************************************************/voidI2C_NoAck(void){SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();SCL_L;I2C_delay();}/********************************************************************************FunctionName:I2C_WaitAck*Description:MasterReseriveSlaveAcknowledgeSingle*Input:None*Output:None*Return:WheatherReseriveSlaveAcknowledgeSingle*******************************************************************************/boolI2C_WaitAck(void)//返回为:=1有ACK,=0无ACK{SCL_L;I2C_delay();SDA_H;I2C_delay();SCL_H;I2C_delay();if(SDA_read){SCL_L;I2C_delay();returnFALSE;}SCL_L;I2C_delay();returnTRUE;}/**********************************************
本文标题:mpu6050详细C语言程序
链接地址:https://www.777doc.com/doc-4628494 .html