mpu6050详细C语言程序_第1页
mpu6050详细C语言程序_第2页
mpu6050详细C语言程序_第3页
mpu6050详细C语言程序_第4页
mpu6050详细C语言程序_第5页
免费预览已结束,剩余17页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用文档/* */陀螺仪MPU6050 IIC测试程序*/#include "stm32f10x_lib.h"#include <math.h> /Keil libraryGPIO_InitTypeDef GPIO_InitStructure;ErrorStatus HSEStartUpStatus;#define uchar unsigned char#define uint unsigned int/定义 MPU6050内部地址#define SMPLRT_DIV0x19陀螺仪采样率,典型值:0x07(125Hz)#define CONFIG0x1A 低通滤

2、波频率,典型值:0x06(5Hz)#define GYRO_CONFIG 0x1B陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)# define ACCEL_CONFIG 0x1C/加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G, 5Hz)# define ACCEL_XOUT_H 0x3B# define ACCEL_XOUT_L 0x3C# define ACCEL_YOUT_H 0x3D# define ACCEL_YOUT_L 0x3E#define ACCEL_ZOUT_H 0x3F#define ACCEL_ZOUT_L 0x40/#def

3、ine TEMP_OUT_H0x41/#define TEMP_OUT_L0x42/#define GYRO_XOUT_H0x43#define GYRO_XOUT_L0x44#define GYRO_YOUT_H0x45#define GYRO_YOUT_L0x46#define GYRO_ZOUT_H0x47#define PWR_MGMT_1/#define WHO_AM_I#define GYRO_ZOUT_L0x480x6B电源治理,典型值:0x00正常启用0x75 /IIC地址存放器默认数值0x68,只读文案大全实用文档*#define MPU6050_Addr 0xD0 定义器件

4、在IIC 总线中的从地址,根据 ALTADDRESS地址引脚不同修改unsigned char TX_DA TA4;显示据缓存区unsigned char BUF10;接收数据缓存区char test=0;/IIC 用到short T_X,T_Y,T_Z,T_T;X,Y,Z 轴,温度/模才II IIC端口输出输入定义#define SCL_H#define SCL_LGPIOB->BSRR = GPIO_Pin_6GPIOB->BRR = GPIO_Pin_6#define SDA_H#define SDA_L#define SCL_read#define SDA_readGPIO

5、B->BSRR = GPIO_Pin_7GPIOB->BRR = GPIO_Pin_7GPIOB->IDR & GPIO_Pin_6GPIOB->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 Dela

6、yms(vu32 m);/*变量定义*/*/void DATA_printf(uchar *s,short temp_data) if(temp_data<0)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; /*Function NameDescriptionInput O

7、utputReturn:I2C_GPIO_Config:Configration Simulation IIC GPIO:None:None: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, &

8、;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);/* *Function Name Description InputOutputReturn:I2C_delay:Simulation IIC Timing series delay:None:

9、None:None*/void I2C_delay(void) u8 i=30; 这里可以优化速度,经测试最低到5还能写入while(i)i-;文案大全实用文档void delay5ms(void) (int i=5000;while(i)(i-;)/* Function NameDescriptionInput Output Return:I2C_Start:Master Start Simulation IIC Communication:None:None:Wheather Start*/bool I2C_Start(void) (SDA_H;SCL_H;I2C_delay();if(!

10、SDA_read)return FALSE; /SDA 线为低电平那么总线忙 ,退出SDA_L;I2C_delay();if(SDA_read) return FALSE; /SDA 线为高电平那么总线出错 ,退出SDA_L;I2C_delay();return TRUE;/* Function NameDescriptionInput Output Return:I2C_Stop:Master Stop Simulation IIC Communication :None:None:None*/void I2C_Stop(void) (文案大全实用文档SCL_L;I2C_delay();SD

11、A_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();)/* Function Name : I2C_NoAck* Descripti

12、on : 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 NameDescriptionInputOutputReturn:I2C_WaitAck:Master Reserive Slave Acknowledge Single:None:None:Wheather

13、 Reserive Slave Acknowledge Single*/bool I2C_WaitAck(void)返回为:=1有ACK,=0无ACKSCL_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 NameDescriptionInputOutputReturn:I2C_SendByte:Master Send a Byte to Slave:Will Sen

14、d Date:None:None*/void I2C_SendByte(u8 SendByte) / 数据从高位到低位 / u8 i=8;文案大全实用文档while(i-)(SCL_L;I2C_delay();if(SendByte&0x80)SDA_H;elseSDA_L;SendByte<<=1;I2C_delay();SCL_H;I2C_delay();SCL_L;/* Function Name:I2C_RadeByte* Description* Input* Output* Return:Master Reserive a Byte From Slave:Non

15、e:None:Date From Slave*/unsigned char I2C_RadeByte(void)数据从高位到低位 /(u8 i=8;u8 ReceiveByte=0;SDA_H;while(i-)(ReceiveByte<<=1;SCL_L;I2C_delay();SCL_H;I2C_delay();if(SDA_read)(ReceiveByte|=0x01;SCL_L;return ReceiveByte;文案大全实用文档/ZRX/单字节写入 * bool Single_Write(unsigned char SlaveAddress,unsigned char

16、 REG_Address,unsigned char/voidREG_data) if(!I2C_Start()return FALSE;I2C_SendByte(SlaveAddress);发送设备地址 + 写信号 /I2C_SendByte(REG_Address& 0x0700) >>7) | SlaveAddress & 0xFFFE);/ 设置高起始地址 + 器件地址if(!I2C_WaitAck()I2C_Stop(); return FALSE;I2C_SendByte(REG_Address );设置低起始地址I2C_WaitAck();I2C_Se

17、ndByte(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_SendByte(REG_Address &0x0700)>>7)|REG_Address &

18、0xFFFE);/设置高起始地址 +器件地址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;return REG_data;/*文案大全实用文档*函数名称RCC_Configuration(void)*函数功能时钟初

19、始化*输入无*输出无*返回无*/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(HSEStartUpStatus = SUCCESS)(/* HCLK = SYSCLK */RCC_HCLKConfig(RCC_SYSCLK_Div1);/* PC

20、LK2 = 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_PrefetchBuffer_Enable);/* PLLCLK = 8MHz * 9 = 72 MHz */RCC_PLLConfig(RCC_PLLSource_HSE_Di

21、v1, 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_PLLCLK);/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource()

22、!= 0x08) )/* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */| RCC_APB2Periph_GPIOB| RCC_APB2Periph_GPIOD| RCC_APB2Periph_GPIOF| RCC_APB2Periph_AFIORCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC ENABLE);RCC_APB2PeriphClockCmd(

23、RCC_APB2Periph_GPIOE ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG ENABLE);/* * 函数名称:GPIO_Configuration(void)* *函数功能:端口初始化* *输入:无* *输出:无* *返回:无* */ void GPIO_Configuration(void)GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOBRCC_APB2Periph

24、_GPIOC | RCC_APB2Periph_GPIOD, ENABLE );/选中管脚9/复用推挽输出/最高输出速率50MHz/选才A A端口/* Configure USART1 Tx (PA.09) as alternate function push-pull */GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPI

25、O_InitStructure);/* Configure USART1 Rx (PA.10) as input floating */文案大全实用文档GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;/ 选中管脚 10GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure);/选择 A 端口 /* * 函数名称:USART1_Configuration(void)* *函数功能:串口 1初始化* *输入:无* *输出:

26、无* *返回:无*/void USART1_Configuration(void) USART_InitTypeDef USART_InitStructure;USART_ClockInitTypeDef USART_ClockInitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1|RCC_APB2Periph_USART1,ENABLE );USART_ClockInitStructure.USART_Clock = USART_Clock_Disable; 平活动USART_ClockInitStructure.USART_CPOL

27、 = USART_CPOL_Low; 平USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge; 第二个边沿进行数据捕获USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable; 的时钟脉冲不从SCLK输出/* Configure the USART1 synchronous paramters */USART_ClockInit(USART1, &USART_ClockInitStructure);初始化设置USART_InitStructure.USART_Ba

28、udRate =9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;USART_InitStructure.USART_StopBits = USART_StopBits_1;输1个停止位USART_InitStructure.USART_Parity = USART_Parity_No ;/时钟低电/时钟低电/时钟/最后一位数据/时钟参数/波特率为:115200/ 8位数据/在帧结尾传/奇偶失能USART_InitStructure.USART_HardwareFlowControl = USART_Hardware

29、FlowControl_None;文案大全实用文档/硬件流限制失能USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/ 发送使能+接收使能/* Configure USART1 basic and asynchronous paramters */USART_Init(USART1, &USART_InitStructure);/* Enable USART1 */USART_ClearFlag(USART1, USART_IT_RXNE);清中断,以免一启用中断后立即产生中断USART_ITConfig(US

30、ART1,USART_IT_RXNE, ENABLE);使能 USART1 中断源USART_Cmd(USART1, ENABLE);/USART1 总开关:开启/*函数名称NVIC_Configuration(void)*函数功能中断初始化*输 入无*输 出无*返回无*/void NVIC_Configuration(void)NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChanne

31、l;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_Init(&NVIC_InitStructure);/* * 函数名称:WWDG_Configuration(void)* *函数功能:看门狗初始化* *输入:无* *输出:无文案大全实用文档* *返 回:无* /void WWDG_Configuration(void)(RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG , ENABLE);WWDG_SetPrescaler(WWDG_Prescaler_8);/ WWD

32、G clock counter =(PCLK1/4096)/8 = 244 Hz (4 ms)WWDG_SetWindowValue(0x41);/ Set Window value to 0x41WWDG_Enable(0x50);/ Enable WWDG and set counter value to 0x7F,WWDG timeout = 4 ms * 64 = 262 ms WWDG_ClearFlag();/ Clear EWI flagWWDG_EnableIT();/ Enable EW interrupt /*函数名称Delay(vu32 nCount)*函数功能延时函数*

33、输 入无*输 出无*返回无* */void Delay(vu32 nCount)(for(; nCount != 0; nCount-);/*函数名称void Delayms(vu32 m)*函数功能长延时函数m=1,延时1ms*输 入无*输 出无*返回无*/void Delayms(vu32 m)文案大全实用文档(u32 i;for(; m != 0; m-)for (i=0; i<50000; i+);)/*函数名称WWDG_IRQHandler(void)*函数功能窗口提前唤醒中断*输 入无*输 出无*返回无* */void WWDG_IRQHandler(void)(/* Upd

34、ate WWDG counter */WWDG_SetCounter(0x50);/* Clear EWI flag */ WWDG_ClearFlag();)/*void USART1_SendData(uchar SendData) (USART_SendData(USART1, SendData);Delayms;)初始化MPU6050 ,根据需要请参考 pdf进行彳改*void Init_MPU6050(void) (Single_Write(MPU6050_Addr,PWR_MGMT_1,0x00);解除休眠状态Single_Write(MPU6050_Addr,SMPLRT_DIV

35、, 0x07);Single_Write(MPU6050_Addr,CONFIG , 0x06);Single_Write(MPU6050_Addr,GYRO_CONFIG , 0x18);Single_Write(MPU6050_Addr,ACCEL_CONFIG , 0x01);)文案大全实用文档/* 读取 MPU6050 数据* void READ_MPU6050(void)(BUF0=Single_Read(MPU6050_Addr,GYRO_XOUT_L);BUF1=Single_Read(MPU6050_Addr,GYRO_XOUT_H);T_X= (BUF1<<8)|BUF0;T_X/=16.4;/读取at算X轴数据BUF2=Single_Read(MPU6050_Addr,G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论