找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STM32F103C8T6+MPU6050+OLED spi显示欧拉角源程序

  [复制链接]
跳转到指定楼层
楼主
ID:495666 发表于 2019-6-27 22:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面是主函数代码,引脚接线说明也在里面

单片机源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "mpu6050.h"
  6. #include "usmart.h"   
  7. #include "inv_mpu.h"
  8. #include "inv_mpu_dmp_motion_driver.h"
  9. #include "oled.h"


  10. /************************************************

  11. MPU6050六轴传感器 实验
  12. STM32F103C8T6
  13. ************************************************/


  14. //////////////////////////////////////////////////////////////////////////////////         
  15. //
  16. //  文 件 名   : main.c
  17. //  功能描述   : OLED 接口演示例程
  18. //              说明:
  19. //              ----------------------------------------------------------------
  20. //              GND    电源地
  21. //              VCC  接5V或3.3v电源
  22. //              D0   接PB13(SCL)
  23. //              D1   接PB15(SDA)
  24. //              RES  接系统复位  PB1
  25. //              DC   接PB1
  26. //              CS   接PB12            
  27. //              ----------------------------------------------------------------
  28. //******************************************************************************/
  29. //////////////////////////////////////////////////////////////////////////////////         
  30. //
  31. //  文 件 名   : main.c
  32. //  功能描述   : MPU6050  GY-512接口演示例程
  33. //              说明:
  34. //              ----------------------------------------------------------------
  35. //              GND    电源地
  36. //              VCC   接5V或3.3v电源
  37. //              SCL   接PB10(SCL)
  38. //              SDA   接PB11(SDA)
  39. //              AD0   接PA15
  40. //              INT   接PA4
  41. //                       
  42. //              ----------------------------------------------------------------
  43. //******************************************************************************/


  44. //串口1发送1个字符
  45. //c:要发送的字符
  46. void usart1_send_char(u8 c)
  47. {           
  48.         while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET); //循环发送,直到发送完毕   
  49.         USART_SendData(USART1,c);  
  50. }
  51. //传送数据给匿名四轴上位机软件(V2.6版本)
  52. //fun:功能字. 0XA0~0XAF
  53. //data:数据缓存区,最多28字节!!
  54. //len:data区有效数据个数
  55. void usart1_niming_report(u8 fun,u8*data,u8 len)
  56. {
  57.         u8 send_buf[32];
  58.         u8 i;
  59.         if(len>28)return;        //最多28字节数据
  60.         send_buf[len+3]=0;        //校验数置零
  61.         send_buf[0]=0X88;        //帧头
  62.         send_buf[1]=fun;        //功能字
  63.         send_buf[2]=len;        //数据长度
  64.         for(i=0;i<len;i++)send_buf[3+i]=data[i];                        //复制数据
  65.         for(i=0;i<len+3;i++)send_buf[len+3]+=send_buf[i];        //计算校验和        
  66.         for(i=0;i<len+4;i++)usart1_send_char(send_buf[i]);        //发送数据到串口1
  67. }
  68. //发送加速度传感器数据和陀螺仪数据
  69. //aacx,aacy,aacz:x,y,z三个方向上面的加速度值
  70. //gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
  71. void mpu6050_send_data(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz)
  72. {
  73.         u8 tbuf[12];
  74.         tbuf[0]=(aacx>>8)&0XFF;
  75.         tbuf[1]=aacx&0XFF;
  76.         tbuf[2]=(aacy>>8)&0XFF;
  77.         tbuf[3]=aacy&0XFF;
  78.         tbuf[4]=(aacz>>8)&0XFF;
  79.         tbuf[5]=aacz&0XFF;
  80.         tbuf[6]=(gyrox>>8)&0XFF;
  81.         tbuf[7]=gyrox&0XFF;
  82.         tbuf[8]=(gyroy>>8)&0XFF;
  83.         tbuf[9]=gyroy&0XFF;
  84.         tbuf[10]=(gyroz>>8)&0XFF;
  85.         tbuf[11]=gyroz&0XFF;
  86.         usart1_niming_report(0XA1,tbuf,12);//自定义帧,0XA1
  87. }        
  88. //通过串口1上报结算后的姿态数据给电脑
  89. //aacx,aacy,aacz:x,y,z三个方向上面的加速度值
  90. //gyrox,gyroy,gyroz:x,y,z三个方向上面的陀螺仪值
  91. //roll:横滚角.单位0.01度。 -18000 -> 18000 对应 -180.00  ->  180.00度
  92. //pitch:俯仰角.单位 0.01度。-9000 - 9000 对应 -90.00 -> 90.00 度
  93. //yaw:航向角.单位为0.1度 0 -> 3600  对应 0 -> 360.0度
  94. void usart1_report_imu(short aacx,short aacy,short aacz,short gyrox,short gyroy,short gyroz,short roll,short pitch,short yaw)
  95. {
  96.         u8 tbuf[28];
  97.         u8 i;
  98.         for(i=0;i<28;i++)tbuf[i]=0;//清0
  99.         tbuf[0]=(aacx>>8)&0XFF;
  100.         tbuf[1]=aacx&0XFF;
  101.         tbuf[2]=(aacy>>8)&0XFF;
  102.         tbuf[3]=aacy&0XFF;
  103.         tbuf[4]=(aacz>>8)&0XFF;
  104.         tbuf[5]=aacz&0XFF;
  105.         tbuf[6]=(gyrox>>8)&0XFF;
  106.         tbuf[7]=gyrox&0XFF;
  107.         tbuf[8]=(gyroy>>8)&0XFF;
  108.         tbuf[9]=gyroy&0XFF;
  109.         tbuf[10]=(gyroz>>8)&0XFF;
  110.         tbuf[11]=gyroz&0XFF;        
  111.         tbuf[18]=(roll>>8)&0XFF;
  112.         tbuf[19]=roll&0XFF;
  113.         tbuf[20]=(pitch>>8)&0XFF;
  114.         tbuf[21]=pitch&0XFF;
  115.         tbuf[22]=(yaw>>8)&0XFF;
  116.         tbuf[23]=yaw&0XFF;
  117.         usart1_niming_report(0XAF,tbuf,28);//飞控显示帧,0XAF
  118. }  
  119.          
  120. int main(void)
  121. {         
  122.         u8 t=0;                        //默认开启上报
  123.         
  124.         float pitch,roll,yaw;                 //欧拉角
  125.         short aacx,aacy,aacz;                //加速度传感器原始数据
  126.         short gyrox,gyroy,gyroz;        //陀螺仪原始数据
  127.         short temp;                                        //温度        
  128.          
  129.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);         //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
  130.         uart_init(500000);                 //串口初始化为500000
  131.         delay_init();        //延时初始化
  132.         usmart_dev.init(72);                //初始化USMART
  133.         LED_Init();                                          //初始化与LED连接的硬件接口
  134.         OLED_Init();                        //初始化OLED  
  135.         OLED_Clear()          ;   
  136.         MPU_Init();                                        //初始化MPU6050
  137.          
  138.          if(        mpu_dmp_init() )
  139.                 {
  140.                
  141.                 OLED_ShowString(0,0," error");        
  142.                
  143.                 }
  144.                 else
  145.                 {
  146.                         OLED_ShowString(0,0," pitch:   . C");        
  147.                 OLED_ShowString(0,3," Roll:    . C");
  148.                 OLED_ShowString(0,6," yaw:     . C");        
  149.                 }
  150.          
  151.         /*
  152.          OLED_ShowString(0,0," pitch:   . C");        
  153.                 OLED_ShowString(0,3," Roll:    . C");
  154.                 OLED_ShowString(0,6," yaw:     . C");               
  155.    while(        mpu_dmp_init() )
  156.                 {
  157.                
  158.                 OLED_ShowString(0,0," error");        
  159.                
  160.                 } */
  161.          while(1)
  162.         {
  163.                
  164.                
  165.                

  166.         
  167.                         if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0)
  168.                 {
  169.                         delay_ms(1);
  170.                         //OLED_ShowString(0,6," success");        
  171.                         temp=MPU_Get_Temperature();        //得到温度值
  172.                         MPU_Get_Accelerometer(&aacx,&aacy,&aacz);        //得到加速度传感器数据
  173.                         MPU_Get_Gyroscope(&gyrox,&gyroy,&gyroz);        //得到陀螺仪数据
  174.                         mpu_dmp_get_data(&pitch,&roll,&yaw);
  175.                         
  176.                         
  177.                         if((t%10)==0)
  178.                         {
  179.                                 
  180.                                 temp=pitch*10;
  181.                                 if(temp<0)
  182.                                 {
  183.                                         OLED_ShowChar(0+48,0,'-');                //显示负号
  184.                                         temp=-temp;                //转为正数
  185.                                 }else OLED_ShowChar(0+48,0,' ');                //去掉负号
  186.                                 OLED_ShowNum(0+48+8,0,temp/10,3,16);                //显示整数部分            
  187.                                 OLED_ShowNum(0+48+40,0,temp%10,1,16);                //显示小数部分
  188.                                 /*
  189.                                 temp=pitch*10;
  190.                                 if(temp<0)
  191.                                 {
  192.                                 OLED_ShowNum(50,2,temp,3,16);                //显示小数部分                 //转为正数
  193.                                 }  */
  194.                                 
  195.                                 temp=roll*10;
  196.                                 if(temp<0)
  197.                                 {
  198.                                         OLED_ShowChar(0+48,3,'-');                //显示负号
  199.                                         temp=-temp;                //转为正数
  200.                                 }else OLED_ShowChar(0+48,3,' ');                //去掉负号
  201.                                 OLED_ShowNum(0+48+8,3,temp/10,3,16);                //显示整数部分            
  202.                                 OLED_ShowNum(0+48+40,3,temp%10,1,16);                //显示小数部分
  203.                                 
  204.                                 temp=yaw*10;
  205.                                 if(temp<0)
  206.                                 {
  207.                                         OLED_ShowChar(0+48,6,'-');                //显示负号
  208.                                         temp=-temp;                //转为正数
  209.                                 }else OLED_ShowChar(0+48,6,' ');                //去掉负号
  210.                                 OLED_ShowNum(0+48+8,6,temp/10,3,16);                //显示整数部分            
  211.                                 OLED_ShowNum(0+48+40,6,temp%10,1,16);                //显示小数部分

  212.                         t=0;
  213.                                 
  214.                         }
  215.                         t++;
  216.                 }        
  217.         
  218.         }
  219. }
复制代码

所有资料51hei提供下载(文件已经被管理员屏蔽 无法下载,原因请看回帖:
MPU6050+spi OLED+C8T6.7z (273.27 KB, 下载次数: 150)



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

使用道具 举报

沙发
ID:396691 发表于 2019-8-5 13:51 | 只看该作者
程序选的芯片并不是C8T6,经过修改后也不能够成功运行
回复

使用道具 举报

板凳
ID:595719 发表于 2019-8-5 17:48 | 只看该作者
试试看
回复

使用道具 举报

地板
ID:619930 发表于 2019-10-9 15:24 | 只看该作者
不是c8t6d
是ZET6的
回复

使用道具 举报

5#
ID:289059 发表于 2020-3-12 22:16 | 只看该作者
骗分的,别下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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