久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11896|回復: 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, 下載次數: 214)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
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 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产日日操 | 国产精品久久久久久久久久 | 天天操天天插天天干 | 91av在线视频观看 | 18成人在线观看 | 在线资源视频 | 影音先锋成人资源 | 日韩一区二区在线观看 | 欧美精品a∨在线观看不卡 欧美日韩中文字幕在线播放 | 久久夜视频 | 91亚洲精品国偷拍自产在线观看 | 精品免费在线 | 成人在线免费视频观看 | 亚洲色图插插插 | 亚洲成人精品免费 | 国产一级一级 | www.4hu影院 | 欧美激情欧美激情在线五月 | 狠狠爱一区二区三区 | 亚洲欧洲视频 | 久久精品国产清自在天天线 | 成人一区二区三区 | 久久久久免费精品国产 | 久草视频观看 | 亚洲精品乱码8久久久久久日本 | 亚洲国产视频一区二区 | 免费网站国产 | 中文字幕在线免费观看 | 久久99精品久久久 | 91中文| 最新av在线网址 | 亚洲成人国产综合 | 精品视频免费 | 毛片a区 | 色狠狠一区 | 精品av天堂毛片久久久借种 | 国产探花 | 三级视频网站 | 97中文视频| 一级a性色生活片久久毛片 一级特黄a大片 | 午夜免费观看体验区 |