1、mpu6050详细C语言程序/*/ 陀螺仪 MPU6050 IIC测试程序*/*include stm32f10*_lib.h*include /Keil library GPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;*define uchar unsigned char*define uint unsigned int / 定义MPU6050部地址*define SMPLRT_DIV 0*19 /陀螺仪采样率,典型值:0*07(125Hz)*define CONFIG 0*1A /低通滤波频率,典型值:0*0
2、6(5Hz)*define GYRO_CONFIG 0*1B /陀螺仪自检及测量围,典型值:0*18(不自检,2000deg/s)*define ACCEL_CONFIG 0*1C /加速计自检、测量围及高通滤波频率,典型值:0*01(不自检,2G,5Hz)*define ACCEL_*OUT_H 0*3B*define ACCEL_*OUT_L 0*3C*define ACCEL_YOUT_H 0*3D*define ACCEL_YOUT_L 0*3E*define ACCEL_ZOUT_H 0*3F*define ACCEL_ZOUT_L 0*40/*define TEMP_OUT_H 0
3、*41/*define TEMP_OUT_L 0*42/*define GYRO_*OUT_H 0*43*define GYRO_*OUT_L 0*44 *define GYRO_YOUT_H 0*45*define GYRO_YOUT_L 0*46*define GYRO_ZOUT_H 0*47*define GYRO_ZOUT_L 0*48*define PWR_MGMT_1 0*6B /电源管理,典型值:0*00(正常启用)/*define WHO_AM_I 0*75 /IIC地址寄存器(默认数值0*68,只读)/*define MPU6050_Addr 0*D0 /定义器件在IIC总线
4、中的从地址,根据ALT ADDRESS地址引脚不同修改unsigned char T*_DATA4; /显示据缓存区unsigned char BUF10; /接收数据缓存区char test=0; /IIC用到short T_*,T_Y,T_Z,T_T; /*,Y,Z轴,温度/模拟IIC端口输出输入定义*define SCL_H GPIOB-BSRR = GPIO_Pin_6*define SCL_L GPIOB-BRR = GPIO_Pin_6 *define SDA_H GPIOB-BSRR = GPIO_Pin_7*define SDA_L GPIOB-BRR = GPIO_Pin_7
5、*define SCL_read GPIOB-IDR & GPIO_Pin_6*define SDA_read GPIOB-IDR & GPIO_Pin_7/* 函数申明 -*/void RCC_Configuration(void);void GPIO_Configuration(void);void NVIC_Configuration(void);void USART1_Configuration(void);void WWDG_Configuration(void);void Delay(u32 nTime);void Delayms(vu32 m); /* 变量定义 -*/ /*/v
6、oid DATA_printf(uchar *s,short temp_data) if(temp_data0) temp_data=-temp_data; *s=-; else *s= ; *+s =temp_data/100+0*30; temp_data=temp_data%100; /取余运算 *+s =temp_data/10+0*30; temp_data=temp_data%10; /取余运算 *+s =temp_data+0*30; /* Function Name : I2C_GPIO_Config* Description : Configration Simulation
7、 IIC GPIO* Input : None * Output : None* Return : None* */void I2C_GPIO_Config(void) GPIO_InitTypeDef GPIO_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)
8、; 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);/* Function Name : I2C_delay* Description : Simulation IIC Timing series delay* Input : None* Output : None* Return : N
9、one* */void I2C_delay(void) u8 i=30; /这里可以优化速度 ,经测试最低到5还能写入 while(i) i-; void delay5ms(void) int i=5000; while(i) i-; /* Function Name : I2C_Start* Description : Master Start Simulation IIC munication* Input : None* Output : None* Return : Wheather Start* */bool I2C_Start(void) SDA_H; SCL_H; I2C_del
10、ay(); if(!SDA_read)return FALSE; /SDA线为低电平则总线忙,退出 SDA_L; I2C_delay(); if(SDA_read) return FALSE; /SDA线为高电平则总线出错,退出 SDA_L; I2C_delay(); return TRUE;/* Function Name : I2C_Stop* Description : Master Stop Simulation IIC munication* Input : None* Output : None* Return : None* */void I2C_Stop(void) SCL_L
11、; I2C_delay(); SDA_L; I2C_delay(); SCL_H; I2C_delay(); SDA_H; I2C_delay(); /* Function Name : I2C_Ack* Description : Master Send Acknowledge Single* Input : None* Output : None* Return : None* */void I2C_Ack(void) SCL_L; I2C_delay(); SDA_L; I2C_delay(); SCL_H; I2C_delay(); SCL_L; I2C_delay(); /* Fun
12、ction Name : I2C_NoAck* Description : Master Send No Acknowledge Single* Input : None* Output : None* Return : None* */void I2C_NoAck(void) SCL_L; I2C_delay(); SDA_H; I2C_delay(); SCL_H; I2C_delay(); SCL_L; I2C_delay(); /* Function Name : I2C_WaitAck* Description : Master Reserive Slave Acknowledge
13、Single* Input : None* Output : None* Return : Wheather Reserive Slave Acknowledge Single* */bool I2C_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(); return FALSE; SCL_L; I2C_delay(); return TRUE;/* Function Name : I2C_Send
14、Byte* Description : Master Send a Byte to Slave* Input : Will Send Date* Output : None* Return : None* */void I2C_SendByte(u8 SendByte) /数据从高位到低位/ u8 i=8; while(i-) SCL_L; I2C_delay(); if(SendByte&0*80) SDA_H; else SDA_L; SendByte=1; I2C_delay(); SCL_H; I2C_delay(); SCL_L; /* Function Name : I2C_Rad
15、eByte* Description : Master Reserive a Byte From Slave* Input : None* Output : None* Return : Date From Slave * */unsigned char I2C_RadeByte(void) /数据从高位到低位/ u8 i=8; u8 ReceiveByte=0; SDA_H; while(i-) ReceiveByte7) | SlaveAddress & 0*FFFE);/设置高起始地址+器件地址 if(!I2C_WaitAck()I2C_Stop(); return FALSE; I2C
16、_SendByte(REG_Address ); /设置低起始地址 I2C_WaitAck(); I2C_SendByte(REG_data); I2C_WaitAck(); I2C_Stop(); delay5ms(); return TRUE;/单字节读取*unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address) unsigned char REG_data; if(!I2C_Start()return FALSE; I2C_SendByte(SlaveAddress); /I2C_Sen
17、dByte(REG_Address & 0*0700) 7) | REG_Address & 0*FFFE);/设置高起始地址+器件地址 if(!I2C_WaitAck()I2C_Stop();test=1; return FALSE; I2C_SendByte(u8) REG_Address); /设置低起始地址 I2C_WaitAck(); I2C_Start(); I2C_SendByte(SlaveAddress+1); I2C_WaitAck(); REG_data= I2C_RadeByte(); I2C_NoAck(); I2C_Stop(); /return TRUE; ret
18、urn REG_data; /* 函数名称 : RCC_Configuration(void)* 函数功能 : 时钟初始化* 输 入 : 无* 输 出 : 无* 返 回 : 无*/void RCC_Configuration(void) /* RCC system reset(for debug purpose) */ RCC_DeInit(); /* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON); /* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp(); if(HSESt
19、artUpStatus = SUCCESS) /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1); /* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_P
20、refetchBuffer_Enable); /* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* Enable PLL */ RCC_PLLCmd(ENABLE); /* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET) /* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_P
21、LLCLK); /* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0*08) /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC
22、_APB2Periph_GPIOD , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF , ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO , ENABLE); /* 函数名称 : GPIO_Configuration(void)* 函数功能 : 端口初始化* 输 入 : 无* 输 出 : 无* 返 回 : 无*/void GPIO_Configuration(void) GPIO_InitTypeDef GPIO_In
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2