找回密码
 注册

QQ登录

只需一步,快速开始

搜索

STM32单片机MPU6050模块GY-521串口输出(修改官方代码错误亲...

[复制链接]
路漫漫 发表于 2020-5-24 01:28:01 | 显示全部楼层 |阅读模式
完整源码: 串口.7z (205.84 KB, 售价: 2 E币)

部分源码:
  1. /*******************************************************************************
  2. // GY-521 MPU6050 IIC测试程序
  3. // 使用单片机STM32F103C8T6
  4. // 晶振:8.00M
  5. // 编译环境 Keil uVision4
  6. // 时间:2012年5月1日
  7. // 与模块连接 GPIOB6->SCL GPIOB7->SDA      
  8. // 使用:STM32F103C8T6串口1连接电脑
  9. // 电脑串口助手显示,波特率:115200
  10. *******************************************************************************/

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

  13. GPIO_InitTypeDef GPIO_InitStructure;
  14. ErrorStatus HSEStartUpStatus;

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

  17. // 定义MPU6050内部地址
  18. //****************************************
  19. #define        SMPLRT_DIV                0x19        //陀螺仪采样率,典型值:0x07(125Hz)
  20. #define        CONFIG                        0x1A        //低通滤波频率,典型值:0x06(5Hz)
  21. #define        GYRO_CONFIG                0x1B        //陀螺仪自检及测量范围,典型值:0x18(不自检,2000deg/s)
  22. #define        ACCEL_CONFIG        0x1C        //加速计自检、测量范围及高通滤波频率,典型值:0x01(不自检,2G,5Hz)
  23. #define        ACCEL_XOUT_H        0x3B
  24. #define        ACCEL_XOUT_L        0x3C
  25. #define        ACCEL_YOUT_H        0x3D
  26. #define        ACCEL_YOUT_L        0x3E
  27. #define        ACCEL_ZOUT_H        0x3F
  28. #define        ACCEL_ZOUT_L        0x40
  29. #define        TEMP_OUT_H                0x41
  30. #define        TEMP_OUT_L                0x42

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

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


  39. //****************************

  40. #define        MPU6050_Addr   0xD0          //定义器件在IIC总线中的从地址,根据ALT  ADDRESS地址引脚不同修改

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

  45. //************************************
  46. /*模拟IIC端口输出输入定义*/
  47. #define SCL_H         GPIOB->BSRR = GPIO_Pin_6
  48. #define SCL_L         GPIOB->BRR  = GPIO_Pin_6
  49.    
  50. #define SDA_H         GPIOB->BSRR = GPIO_Pin_7
  51. #define SDA_L         GPIOB->BRR  = GPIO_Pin_7

  52. #define SCL_read      GPIOB->IDR  & GPIO_Pin_6
  53. #define SDA_read      GPIOB->IDR  & GPIO_Pin_7

  54. /* 函数申明 -----------------------------------------------*/
  55. void RCC_Configuration(void);
  56. void GPIO_Configuration(void);
  57. void NVIC_Configuration(void);
  58. void USART1_Configuration(void);
  59. void WWDG_Configuration(void);
  60. void Delay(u32 nTime);
  61. void Delayms(vu32 m);  
  62. /* 变量定义 ----------------------------------------------*/

  63.   /*******************************/
  64. void DATA_printf(uchar *s,short temp_data)
  65. {
  66.         if(temp_data<0){
  67.         temp_data=-temp_data;
  68.     *s='-';
  69.         }
  70.         else *s=' ';
  71.     *++s =temp_data/100+0x30;
  72.     temp_data=temp_data%100;     //取余运算
  73.     *++s =temp_data/10+0x30;
  74.     temp_data=temp_data%10;      //取余运算
  75.     *++s =temp_data+0x30;         
  76. }

  77. /*******************************************************************************
  78. * Function Name  : I2C_GPIO_Config
  79. * Description    : Configration Simulation IIC GPIO
  80. * Input          : None
  81. * Output         : None
  82. * Return         : None
  83. ****************************************************************************** */
  84. void I2C_GPIO_Config(void)
  85. {
  86.   GPIO_InitTypeDef  GPIO_InitStructure;

  87.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_6;
  88.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  89.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;  
  90.   GPIO_Init(GPIOB, &GPIO_InitStructure);

  91.   GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_7;
  92.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  93.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;
  94.   GPIO_Init(GPIOB, &GPIO_InitStructure);
  95. }

  96. /*******************************************************************************
  97. * Function Name  : I2C_delay
  98. * Description    : Simulation IIC Timing series delay
  99. * Input          : None
  100. * Output         : None
  101. * Return         : None
  102. ****************************************************************************** */
  103. void I2C_delay(void)
  104. {
  105.                
  106.    u8 i=30; //这里可以优化速度        ,经测试最低到5还能写入
  107.    while(i)
  108.    {
  109.      i--;
  110.    }  
  111. }

  112. void delay5ms(void)
  113. {
  114.                
  115.    int i=5000;  
  116.    while(i)
  117.    {
  118.      i--;
  119.    }  
  120. }
  121. /*******************************************************************************
  122. * Function Name  : I2C_Start
  123. * Description    : Master Start Simulation IIC Communication
  124. * Input          : None
  125. * Output         : None
  126. * Return         : Wheather         Start
  127. ****************************************************************************** */
  128. bool I2C_Start(void)
  129. {
  130.         SDA_H;
  131.         SCL_H;
  132.         I2C_delay();
  133.         if(!SDA_read)return FALSE;        //SDA线为低电平则总线忙,退出
  134.         SDA_L;
  135.         I2C_delay();
  136.         if(SDA_read) return FALSE;        //SDA线为高电平则总线出错,退出
  137.         SDA_L;
  138.         I2C_delay();
  139.         return TRUE;
  140. }
复制代码

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

本版积分规则

QQ|手机版|小黑屋|ELEOK |网站地图

GMT+8, 2024-11-21 18:39

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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