找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 10085|回复: 9
打印 上一主题 下一主题
收起左侧

MPU6500开发资料下载 6DOF 六轴6轴姿态加速度 陀螺仪 角度传感器STM32源码

  [复制链接]
跳转到指定楼层
楼主
MPU6500模块电路原理图如下:



stm32单片机源程序如下:

  1. /*******************************************************************************
  2. // GY-9250 GY-9150  IIC测试程序
  3. // 使用单片机STM32F103C8T6
  4. // 晶振:8.00M
  5. // 编译环境 Keil uVision4
  6. // 与模块连接 GPIOB6->SCL GPIOB7->SDA      
  7. // 使用:STM32F103C8T6串口1连接电脑
  8. // 电脑串口助手显示,波特率:115200

  9. *******************************************************************************/

  10. #include "stm32f10x_lib.h"
  11. #include  <math.h>    //Keil library  

  12. GPIO_InitTypeDef GPIO_InitStructure;
  13. ErrorStatus HSEStartUpStatus;

  14. #define   uchar unsigned char
  15. #define   uint unsigned int        

  16. // 定义MPU9250内部地址
  17. //****************************************
  18. #define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
  19. #define        CONFIG                        0x1A        //低通滤波频率,典型值:0x06(5Hz)
  20. #define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
  21. #define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)

  22. #define        ACCEL_XOUT_H        0x3B
  23. #define        ACCEL_XOUT_L        0x3C
  24. #define        ACCEL_YOUT_H        0x3D
  25. #define        ACCEL_YOUT_L        0x3E
  26. #define        ACCEL_ZOUT_H        0x3F
  27. #define        ACCEL_ZOUT_L        0x40

  28. #define        TEMP_OUT_H                0x41
  29. #define        TEMP_OUT_L                0x42

  30. #define        GYRO_XOUT_H                0x43
  31. #define        GYRO_XOUT_L                0x44        
  32. #define        GYRO_YOUT_H                0x45
  33. #define        GYRO_YOUT_L                0x46
  34. #define        GYRO_ZOUT_H                0x47
  35. #define        GYRO_ZOUT_L                0x48

  36.                
  37. #define MAG_XOUT_L                0x03
  38. #define MAG_XOUT_H                0x04
  39. #define MAG_YOUT_L                0x05
  40. #define MAG_YOUT_H                0x06
  41. #define MAG_ZOUT_L                0x07
  42. #define MAG_ZOUT_H                0x08


  43. #define        PWR_MGMT_1                0x6B        //电源管理,典型值:0x00(正常启用)
  44. #define        WHO_AM_I                  0x75        //IIC地址寄存器(默认数值0x68,只读)


  45. //****************************

  46. #define        GYRO_ADDRESS   0xD0          //陀螺地址
  47. #define MAG_ADDRESS    0x18   //磁场地址
  48. #define ACCEL_ADDRESS  0xD0

  49. unsigned char TX_DATA[4];           //显示据缓存区
  50. unsigned char BUF[10];       //接收数据缓存区
  51. char  test=0;                                  //IIC用到
  52. short T_X,T_Y,T_Z,T_T;                 //X,Y,Z轴,温度

  53. //************************************
  54. /*模拟IIC端口输出输入定义*/
  55. #define SCL_H         GPIOB->BSRR = GPIO_Pin_6
  56. #define SCL_L         GPIOB->BRR  = GPIO_Pin_6
  57.    
  58. #define SDA_H         GPIOB->BSRR = GPIO_Pin_7
  59. #define SDA_L         GPIOB->BRR  = GPIO_Pin_7

  60. #define SCL_read      GPIOB->IDR  & GPIO_Pin_6
  61. #define SDA_read      GPIOB->IDR  & GPIO_Pin_7

  62. /* 函数申明 -----------------------------------------------*/
  63. void RCC_Configuration(void);
  64. void GPIO_Configuration(void);
  65. void NVIC_Configuration(void);
  66. void USART1_Configuration(void);
  67. void WWDG_Configuration(void);
  68. void Delay(u32 nTime);
  69. void Delayms(vu32 m);  
  70. /* 变量定义 ----------------------------------------------*/

  71.   /*******************************/
  72. void DATA_printf(uchar *s,short temp_data)
  73. {
  74.         if(temp_data<0){
  75.         temp_data=-temp_data;
  76.     *s='-';
  77.         }
  78.         else *s=' ';
  79.     *++s =temp_data/100+0x30;
  80.     temp_data=temp_data%100;     //取余运算
  81.     *++s =temp_data/10+0x30;
  82.     temp_data=temp_data%10;      //取余运算
  83.     *++s =temp_data+0x30;         
  84. }

  85. /*******************************************************************************
  86. * Function Name  : I2C_GPIO_Config
  87. * Description    : Configration Simulation IIC GPIO
  88. * Input          : None
  89. * Output         : None
  90. * Return         : None
  91. ****************************************************************************** */
  92. void I2C_GPIO_Config(void)
  93. {
  94.   GPIO_InitTypeDef  GPIO_InitStructure;

  95.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  96.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  97.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  98.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  99.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  100.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  101.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  102.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  103. }

  104. /*******************************************************************************
  105. * Function Name  : I2C_delay
  106. * Description    : Simulation IIC Timing series delay
  107. * Input          : None
  108. * Output         : None
  109. * Return         : None
  110. ****************************************************************************** */
  111. void I2C_delay(void)
  112. {
  113.                
  114.    u8 i=30; //这里可以优化速度        ,经测试最低到5还能写入
  115.    while(i)
  116.    {
  117.      i--;
  118.    }  
  119. }

  120. void delay5ms(void)
  121. {
  122.                
  123.    int i=5000;  
  124.    while(i)
  125.    {
  126.      i--;
  127.    }  
  128. }
  129. /*******************************************************************************
  130. * Function Name  : I2C_Start
  131. * Description    : Master Start Simulation IIC Communication
  132. * Input          : None
  133. * Output         : None
  134. * Return         : Wheather         Start
  135. ****************************************************************************** */
  136. bool I2C_Start(void)
  137. {
  138.         SDA_H;
  139.         SCL_H;
  140.         I2C_delay();
  141.         if(!SDA_read)return FALSE;        //SDA线为低电平则总线忙,退出
  142.         SDA_L;
  143.         I2C_delay();
  144.         if(SDA_read) return FALSE;        //SDA线为高电平则总线出错,退出
  145.         SDA_L;
  146.         I2C_delay();
  147.         return TRUE;
  148. }
  149. /*******************************************************************************
  150. * Function Name  : I2C_Stop
  151. * Description    : Master Stop Simulation IIC Communication
  152. * Input          : None
  153. * Output         : None
  154. * Return         : None
  155. ****************************************************************************** */
  156. void I2C_Stop(void)
  157. {
  158.         SCL_L;
  159.         I2C_delay();
  160.         SDA_L;
  161.         I2C_delay();
  162.         SCL_H;
  163.         I2C_delay();
  164.         SDA_H;
  165.         I2C_delay();
  166. }
  167. /*******************************************************************************
  168. * Function Name  : I2C_Ack
  169. * Description    : Master Send Acknowledge Single
  170. * Input          : None
  171. * Output         : None
  172. * Return         : None
  173. ****************************************************************************** */
  174. void I2C_Ack(void)
  175. {        
  176.         SCL_L;
  177.         I2C_delay();
  178.         SDA_L;
  179.         I2C_delay();
  180.         SCL_H;
  181.         I2C_delay();
  182.         SCL_L;
  183.         I2C_delay();
  184. }   
  185. /*******************************************************************************
  186. * Function Name  : I2C_NoAck
  187. * Description    : Master Send No Acknowledge Single
  188. * Input          : None
  189. * Output         : None
  190. * Return         : None
  191. ****************************************************************************** */
  192. void I2C_NoAck(void)
  193. {        
  194.         SCL_L;
  195.         I2C_delay();
  196.         SDA_H;
  197.         I2C_delay();
  198.         SCL_H;
  199.         I2C_delay();
  200.         SCL_L;
  201.         I2C_delay();
  202. }
  203. /*******************************************************************************
  204. * Function Name  : I2C_WaitAck
  205. * Description    : Master Reserive Slave Acknowledge Single
  206. * Input          : None
  207. * Output         : None
  208. * Return         : Wheather         Reserive Slave Acknowledge Single
  209. ****************************************************************************** */
  210. bool I2C_WaitAck(void)          //返回为:=1有ACK,=0无ACK
  211. {
  212.         SCL_L;
  213.         I2C_delay();
  214.         SDA_H;                        
  215.         I2C_delay();
  216.         SCL_H;
  217.         I2C_delay();
  218.         if(SDA_read)
  219.         {
  220.       SCL_L;
  221.           I2C_delay();
  222.       return FALSE;
  223.         }
  224.         SCL_L;
  225.         I2C_delay();
  226.         return TRUE;
  227. }
  228. /*******************************************************************************
  229. * Function Name  : I2C_SendByte
  230. * Description    : Master Send a Byte to Slave
  231. * Input          : Will Send Date
  232. * Output         : None
  233. * Return         : None
  234. ****************************************************************************** */
  235. void I2C_SendByte(u8 SendByte) //数据从高位到低位//
  236. {
  237.     u8 i=8;
  238.     while(i--)
  239.     {
  240.         SCL_L;
  241.         I2C_delay();
  242.       if(SendByte&0x80)
  243.         SDA_H;  
  244.       else
  245.         SDA_L;   
  246.         SendByte<<=1;
  247.         I2C_delay();
  248.                 SCL_H;
  249.         I2C_delay();
  250.     }
  251.     SCL_L;
  252. }  
  253. /*******************************************************************************
  254. * Function Name  : I2C_RadeByte
  255. * Description    : Master Reserive a Byte From Slave
  256. * Input          : None
  257. * Output         : None
  258. * Return         : Date From Slave
  259. ****************************************************************************** */
  260. unsigned char I2C_RadeByte(void)  //数据从高位到低位//
  261. {
  262.     u8 i=8;
  263.     u8 ReceiveByte=0;

  264.     SDA_H;                                
  265.     while(i--)
  266.     {
  267.       ReceiveByte<<=1;      
  268.       SCL_L;
  269.       I2C_delay();
  270.           SCL_H;
  271.       I2C_delay();        
  272.       if(SDA_read)
  273.       {
  274.         ReceiveByte|=0x01;
  275.       }
  276.     }
  277.     SCL_L;
  278.     return ReceiveByte;
  279. }
  280. //ZRX         
  281. //单字节写入*******************************************

  282. bool Single_Write(unsigned char SlaveAddress,unsigned char REG_Address,unsigned char REG_data)                     //void
  283. {
  284.           if(!I2C_Start())return FALSE;
  285.     I2C_SendByte(SlaveAddress);   //发送设备地址+写信号//I2C_SendByte(((REG_Address & 0x0700) >>7) | SlaveAddress & 0xFFFE);//设置高起始地址+器件地址
  286.     if(!I2C_WaitAck()){I2C_Stop(); return FALSE;}
  287.     I2C_SendByte(REG_Address );   //设置低起始地址      
  288.     I2C_WaitAck();        
  289.     I2C_SendByte(REG_data);
  290.     I2C_WaitAck();   
  291.     I2C_Stop();
  292.     delay5ms();
  293.     return TRUE;
  294. }

  295. //单字节读取*****************************************
  296. unsigned char Single_Read(unsigned char SlaveAddress,unsigned char REG_Address)
  297. {   unsigned char REG_data;            
  298.         if(!I2C_Start())return FALSE;
  299.     I2C_SendByte(SlaveAddress); //I2C_SendByte(((REG_Address & 0x0700) >>7) | REG_Address & 0xFFFE);//设置高起始地址+器件地址
  300.     if(!I2C_WaitAck()){I2C_Stop();test=1; return FALSE;}
  301.     I2C_SendByte((u8) REG_Address);   //设置低起始地址      
  302.     I2C_WaitAck();
  303.     I2C_Start();
  304.     I2C_SendByte(SlaveAddress+1);
  305.     I2C_WaitAck();

  306.         REG_data= I2C_RadeByte();
  307.     I2C_NoAck();
  308.     I2C_Stop();
  309.     //return TRUE;
  310.         return REG_data;

  311. }                                                      

  312. /*
  313. ********************************************************************************
  314. ** 函数名称 : RCC_Configuration(void)
  315. ** 函数功能 : 时钟初始化
  316. ** 输    入        : 无
  317. ** 输    出        : 无
  318. ** 返    回        : 无
  319. ********************************************************************************
  320. */
  321. void RCC_Configuration(void)
  322. {   
  323.   /* RCC system reset(for debug purpose) */
  324.   RCC_DeInit();

  325.   /* Enable HSE */
  326.   RCC_HSEConfig(RCC_HSE_ON);

  327.   /* Wait till HSE is ready */
  328.   HSEStartUpStatus = RCC_WaitForHSEStartUp();

  329.   if(HSEStartUpStatus == SUCCESS)
  330.   {
  331.     /* HCLK = SYSCLK */
  332.     RCC_HCLKConfig(RCC_SYSCLK_Div1);
  333.   
  334.     /* PCLK2 = HCLK */
  335.     RCC_PCLK2Config(RCC_HCLK_Div1);

  336.     /* PCLK1 = HCLK/2 */
  337.     RCC_PCLK1Config(RCC_HCLK_Div2);

  338.     /* Flash 2 wait state */
  339.     FLASH_SetLatency(FLASH_Latency_2);
  340.     /* Enable Prefetch Buffer */
  341.     FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

  342.     /* PLLCLK = 8MHz * 9 = 72 MHz */
  343.     RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);

  344.     /* Enable PLL */
  345.     RCC_PLLCmd(ENABLE);

  346.     /* Wait till PLL is ready */
  347.     while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
  348.     {
  349.     }

  350.     /* Select PLL as system clock source */
  351.     RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

  352.     /* Wait till PLL is used as system clock source */
  353.     while(RCC_GetSYSCLKSource() != 0x08)
  354.     {
  355.     }
  356.   }
  357.    /* Enable GPIOA, GPIOB, GPIOC, GPIOD, GPIOE, GPIOF, GPIOG and AFIO clocks */
  358.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB , ENABLE);
  359.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD , ENABLE);
  360.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOF , ENABLE);
  361.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOG | RCC_APB2Periph_AFIO  , ENABLE);  
  362. }

  363. /*
  364. ********************************************************************************
  365. ** 函数名称 : GPIO_Configuration(void)
  366. ** 函数功能 : 端口初始化
  367. ** 输    入        : 无
  368. ** 输    出        : 无
  369. ** 返    回        : 无
  370. ********************************************************************************
  371. */
  372. void GPIO_Configuration(void)
  373. {
  374.   GPIO_InitTypeDef GPIO_InitStructure;
  375.   RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD, ENABLE  );
  376.    /* Configure USART1 Tx (PA.09) as alternate function push-pull */
  377.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;                                 //        选中管脚9
  378.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                 // 复用推挽输出
  379.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                 // 最高输出速率50MHz
  380.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                 // 选择A端口
  381.    
  382.   /* Configure USART1 Rx (PA.10) as input floating */
  383.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;                          //选中管脚10
  384.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;          //浮空输入
  385.   GPIO_Init(GPIOA, &GPIO_InitStructure);                                  //选择A端口

  386. }

  387. /*
  388. ********************************************************************************
  389. ** 函数名称 : USART1_Configuration(void)
  390. ** 函数功能 : 串口1初始化
  391. ** 输    入        : 无
  392. ** 输    出        : 无
  393. ** 返    回        : 无
  394. ********************************************************************************
  395. */
  396. void USART1_Configuration(void)
  397. {

  398. USART_InitTypeDef USART_InitStructure;
  399. USART_ClockInitTypeDef  USART_ClockInitStructure;

  400. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1 |RCC_APB2Periph_USART1, ENABLE  );

  401. USART_ClockInitStructure.USART_Clock = USART_Clock_Disable;                        // 时钟低电平活动
  402. USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;                                // 时钟低电平
  403. USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;                                // 时钟第二个边沿进行数据捕获
  404. USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;                // 最后一位数据的时钟脉冲不从SCLK输出
  405. /* Configure the USART1 synchronous paramters */
  406. USART_ClockInit(USART1, &USART_ClockInitStructure);                                        // 时钟参数初始化设置
  407.                                                                                                                                          
  408. USART_InitStructure.USART_BaudRate = 115200;                                                  // 波特率为:115200
  409. USART_InitStructure.USART_WordLength = USART_WordLength_8b;                          // 8位数据
  410. USART_InitStructure.USART_StopBits = USART_StopBits_1;                                  // 在帧结尾传输1个停止位
  411. USART_InitStructure.USART_Parity = USART_Parity_No ;                                  // 奇偶失能
  412. USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        // 硬件流控制失能

  413. USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;                  // 发送使能+接收使能
  414. /* Configure USART1 basic and asynchronous paramters */
  415. USART_Init(USART1, &USART_InitStructure);
  416.    
  417.   /* Enable USART1 */
  418. USART_ClearFlag(USART1, USART_IT_RXNE);                         //清中断,以免一启用中断后立即产生中断
  419. USART_ITConfig(USART1,USART_IT_RXNE, ENABLE);                //使能USART1中断源
  420. USART_Cmd(USART1, ENABLE);                                                        //USART1总开关:开启
  421. }


  422. /*
  423. ********************************************************************************
  424. ** 函数名称 : NVIC_Configuration(void)
  425. ** 函数功能 : 中断初始化
  426. ** 输    入        : 无
  427. ** 输    出        : 无
  428. ** 返    回        : 无
  429. ********************************************************************************
  430. */
  431. void NVIC_Configuration(void)
  432. {
  433.   NVIC_InitTypeDef NVIC_InitStructure;  
  434.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);

  435.   NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQChannel;
  436.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  437.   NVIC_Init(&NVIC_InitStructure);

  438. }

  439. /*
  440. ********************************************************************************
  441. ** 函数名称 : WWDG_Configuration(void)
  442. ** 函数功能 : 看门狗初始化
  443. ** 输    入        : 无
  444. ** 输    出        : 无
  445. ** 返    回        : 无
  446. ********************************************************************************
  447. */
  448. void WWDG_Configuration(void)
  449. {
  450.   RCC_APB1PeriphClockCmd(RCC_APB1Periph_WWDG, ENABLE);        
  451.   WWDG_SetPrescaler(WWDG_Prescaler_8);                      //  WWDG clock counter = (PCLK1/4096)/8 = 244 Hz (~4 ms)  
  452.   WWDG_SetWindowValue(0x41);                                 // Set Window value to 0x41
  453.   WWDG_Enable(0x50);                       // Enable WWDG and set counter value to 0x7F, WWDG timeout = ~4 ms * 64 = 262 ms
  454.   WWDG_ClearFlag();                               // Clear EWI flag
  455.   WWDG_EnableIT();                               // Enable EW interrupt
  456. }

  457. /*
  458. ********************************************************************************
  459. ** 函数名称 : Delay(vu32 nCount)
  460. ** 函数功能 : 延时函数
  461. ** 输    入        : 无
  462. ** 输    出        : 无
  463. ** 返    回        : 无
  464. ********************************************************************************
  465. */
  466. void Delay(vu32 nCount)
  467. {
  468.   for(; nCount != 0; nCount--);
  469. }

  470. /*
  471. ********************************************************************************
  472. ** 函数名称 : void Delayms(vu32 m)
  473. ** 函数功能 : 长延时函数         m=1,延时1ms
  474. ** 输    入        : 无
  475. ** 输    出        : 无
  476. ** 返    回        : 无
  477. ********************************************************************************
  478. */
  479. void Delayms(vu32 m)
  480. {
  481.   u32 i;
  482.   
  483.   for(; m != 0; m--)        
  484.        for (i=0; i<50000; i++);
  485. }

  486. /*
  487. ********************************************************************************
  488. ** 函数名称 : WWDG_IRQHandler(void)
  489. ** 函数功能 : 窗口提前唤醒中断
  490. ** 输    入        : 无
  491. ** 输    出        : 无
  492. ** 返    回        : 无
  493. ********************************************************************************
  494. */

  495. void WWDG_IRQHandler(void)
  496. {
  497.   /* Update WWDG counter */
  498.   WWDG_SetCounter(0x50);
  499.         
  500.   /* Clear EWI flag */
  501.   WWDG_ClearFlag();
  502. }
  503. //************************************************
  504. void  USART1_SendData(uchar SendData)
  505. {
  506. USART_SendData(USART1, SendData);
  507. Delayms(1);
  508. }
  509. //初始化MPU9250,根据需要请参考pdf进行修改************************
  510. void Init_MPU9250(void)
  511. {
  512. /*
  513.    Single_Write(GYRO_ADDRESS,PWR_M, 0x80);   //
  514.    Single_Write(GYRO_ADDRESS,SMPL, 0x07);    //
  515.    Single_Write(GYRO_ADDRESS,DLPF, 0x1E);    //±2000°
  516.    Single_Write(GYRO_ADDRESS,INT_C, 0x00 );  //
  517.    Single_Write(GYRO_ADDRESS,PWR_M, 0x00);   //
  518. */
  519.   Single_Write(GYRO_ADDRESS,PWR_MGMT_1, 0x00);        //解除休眠状态
  520.         Single_Write(GYRO_ADDRESS,SMPLRT_DIV, 0x07);
  521.         Single_Write(GYRO_ADDRESS,CONFIG, 0x06);
  522.         Single_Write(GYRO_ADDRESS,GYRO_CONFIG, 0x18);
  523.         Single_Write(GYRO_ADDRESS,ACCEL_CONFIG, 0x01);
  524.   //----------------
  525. //        Single_Write(GYRO_ADDRESS,0x6A,0x00);//close Master Mode        

  526. }
  527.         
  528. //******读取MPU9250数据****************************************
  529. void READ_MPU9250_ACCEL(void)
  530. {

  531.    BUF[0]=Single_Read(ACCEL_ADDRESS,ACCEL_XOUT_L);
  532.    BUF[1]=Single_Read(ACCEL_ADDRESS,ACCEL_XOUT_H);
  533.    T_X=        (BUF[1]<<8)|BUF[0];
  534.    T_X/=164;                                                    //读取计算X轴数据

  535.    BUF[2]=Single_Read(ACCEL_ADDRESS,ACCEL_YOUT_L);
  536.    BUF[3]=Single_Read(ACCEL_ADDRESS,ACCEL_YOUT_H);
  537.    T_Y=        (BUF[3]<<8)|BUF[2];
  538.    T_Y/=164;                                                    //读取计算Y轴数据
  539.    BUF[4]=Single_Read(ACCEL_ADDRESS,ACCEL_ZOUT_L);
  540.    BUF[5]=Single_Read(ACCEL_ADDRESS,ACCEL_ZOUT_H);
  541.    T_Z=        (BUF[5]<<8)|BUF[4];
  542.    T_Z/=164;                                                //读取计算Z轴数据

  543. }

  544. void READ_MPU9250_GYRO(void)
  545. {

  546.    BUF[0]=Single_Read(GYRO_ADDRESS,GYRO_XOUT_L);
  547.    BUF[1]=Single_Read(GYRO_ADDRESS,GYRO_XOUT_H);
  548.    T_X=        (BUF[1]<<8)|BUF[0];
  549.    T_X/=16.4;                                                    //读取计算X轴数据

  550.    BUF[2]=Single_Read(GYRO_ADDRESS,GYRO_YOUT_L);
  551.    BUF[3]=Single_Read(GYRO_ADDRESS,GYRO_YOUT_H);
  552.    T_Y=        (BUF[3]<<8)|BUF[2];
  553.    T_Y/=16.4;                                                    //读取计算Y轴数据
  554.    BUF[4]=Single_Read(GYRO_ADDRESS,GYRO_ZOUT_L);
  555.    BUF[5]=Single_Read(GYRO_ADDRESS,GYRO_ZOUT_H);
  556.    T_Z=        (BUF[5]<<8)|BUF[4];
  557.    T_Z/=16.4;                                                //读取计算Z轴数据


  558.   // BUF[6]=Single_Read(GYRO_ADDRESS,TEMP_OUT_L);
  559.   // BUF[7]=Single_Read(GYRO_ADDRESS,TEMP_OUT_H);
  560.   // T_T=(BUF[7]<<8)|BUF[6];
  561.   // T_T = 35+ ((double) (T_T + 13200)) / 280;// 读取计算出温度
  562. }


  563. void READ_MPU9250_MAG(void)
  564. {
  565.    Single_Write(GYRO_ADDRESS,0x37,0x02);//turn on Bypass Mode
  566.    Delayms(10);        
  567.    Single_Write(MAG_ADDRESS,0x0A,0x01);
  568.    Delayms(10);        
  569.    BUF[0]=Single_Read (MAG_ADDRESS,MAG_XOUT_L);
  570.    BUF[1]=Single_Read (MAG_ADDRESS,MAG_XOUT_H);
  571.    T_X=(BUF[1]<<8)|BUF[0];

  572.    BUF[2]=Single_Read(MAG_ADDRESS,MAG_YOUT_L);
  573. ……………………

  574. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
GY6500资料.rar (4.58 MB, 下载次数: 208)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:110942 发表于 2018-12-3 21:03 | 只看该作者
好,下载看看!
回复

使用道具 举报

板凳
ID:444125 发表于 2018-12-11 15:22 | 只看该作者
剛好用的到
回复

使用道具 举报

地板
ID:342314 发表于 2019-1-19 15:33 | 只看该作者
楼主,代码是只适用250吗?
回复

使用道具 举报

5#
ID:505804 发表于 2019-4-6 16:22 | 只看该作者
好,刚好用到
回复

使用道具 举报

6#
ID:508944 发表于 2019-4-10 17:15 | 只看该作者

好,刚好用到
回复

使用道具 举报

7#
ID:609076 发表于 2019-9-8 12:38 | 只看该作者
感谢分享,我先下载下来学习下,等有心得会来分享,谢谢!!
回复

使用道具 举报

8#
ID:124631 发表于 2019-10-8 10:58 | 只看该作者
谢谢分享
回复

使用道具 举报

9#
ID:700604 发表于 2020-3-1 13:54 | 只看该作者
很想下载,但是币不够
回复

使用道具 举报

10#
ID:512651 发表于 2020-3-26 17:40 | 只看该作者
刚好要用这个,谢谢分享!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表