找回密码
 立即注册

QQ登录

只需一步,快速开始

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

恒拓飞控源码加详细注释 stm32+mpu6050

  [复制链接]
跳转到指定楼层
楼主
恒拓飞控源码 stm32+mpu6050

完整的程序源码下载:
HT-Hawk飞控源代码.zip (1.1 MB, 下载次数: 245)


下面提供部分程序来预览:
飞控的主程序:
  1. /*
  2. ******************* (C) COPYRIGHT 2015 Air Nano Team ***************************
  3. * 模块名称 : 主程序模块
  4. * 文件名   :main.c
  5. * 描述     :系统初始化         
  6. * 实验平台 :HT_Hawk
  7. * 库版本   :ST3.5.0
  8. * 作者     :Air Nano Team
  9. *********************************************************************************
  10. */

  11. #include "board_config.h"

  12. /*
  13. *********************************************************************************************************
  14. *        函 数 名: main
  15. *        功能说明: c程序入口
  16. *        形    参:无
  17. *        返 回 值: 错误代码(无需处理)
  18. *********************************************************************************************************
  19. */

  20. int main(void)
  21. {
  22.         // boot_loader 相关配置
  23.     Bootloader_Set();              //单片机引导程序
  24.         
  25.         // 硬件初始化
  26.         InitBoard();        

  27.         // 传感器初始化
  28.         Sensor_Init();
  29.         
  30.         // 加载参数
  31.         paramLoad();
  32.         
  33.         /* 开定时中断 */
  34.     EnTIMER;   

  35.         while(1)
  36.         {
  37.      loop();   //主函数循环执行部分  与上位机通讯  刷新OLED屏  保存修改的PID数据
  38.         }                        
  39. }
复制代码
MultiRotor_app.c
  1. /******************** (C) COPYRIGHT 2014 Air Nano Team ***************************
  2. * 文件名  :INIT.c
  3. * 描述    :系统初始化         
  4. * 实验平台:HT_Hawk
  5. * 库版本  :ST3.5.0
  6. * 作者    :Air Nano Team
  7. **********************************************************************************/
  8. #include "include.h"
  9. #include "MultiRotor_app.h"

  10. fp32 Battery_Voltage;
  11. Flag_t flag;    //【标志的结构体定义】 此处可以分开定义
  12. ////*************************************************
  13. ////********* struct {
  14. ////              u8 MpuExist;      // MPU存在
  15. ////              u8 MagExist;      // MAG存在
  16. ////              u8 NrfExist;      // NRF存在
  17. ////              u8 MagIssue;      // MAG有问题
  18. ////
  19. ////          u8 ARMED;         // 电机解锁
  20. ////              u8 LockYaw;       // 航向锁定      
  21. ////          u8 calibratingA;  // 加速度采集
  22. ////              u8 calibratingM;  // 磁力计采集
  23. ////              u8 calibratingM_pre; //磁力计预采集
  24. ////              
  25. ////              u8 ParamSave;     // 参数保存标志
  26. ////        
  27. ////              u8 Loop_250Hz;
  28. ////              u8 Loop_100Hz;
  29. ////              u8 Loop_10Hz;
  30. ////********* }Flag_t;
  31. ////************************************************
  32. /*====================================================================================================*/
  33. /*====================================================================================================*
  34. **函数 : Bootloader_Set
  35. **功能 : BOOT相关设置
  36. **输入 : None
  37. **輸出 : None
  38. **备注 : None
  39. **====================================================================================================*/
  40. /*====================================================================================================*/
  41. void Bootloader_Set(void)
  42. {
  43.          u16 i;
  44.         
  45.         // 设置偏移量
  46.         SCB->VTOR = FLASH_BASE | FLASH_EXCURSION ;
  47.         
  48.         i=0x0505;
  49.         STMFLASH_Write(pro_FALG_ADD,&i,1);   
  50. }
  51. /*====================================================================================================*/
  52. /*====================================================================================================*
  53. **函数 : Sensor_Init
  54. **功能 : ===============================【硬件初始化】===============================================//
  55. **输入 : None
  56. **輸出 : None
  57. **备注 : None
  58. **====================================================================================================*/
  59. /*====================================================================================================*/
  60. void InitBoard(void)
  61. {
  62.         delay_init(72);     //延时函数初始化  使用SYSCLK  分为  【ms级延时  us级延时 普通软件延时】
  63.         Nvic_Init();        //中断初始化      time.c中 配置     【TIM5-系统时基  TIM2 TIM3输入捕捉 提供八通道】
  64.         
  65.         /* 初始化USB设备 */
  66.     bsp_InitUsb();      //与上位机通讯使用
  67.          
  68.         ADC1_Init();        
  69.         OLED_Init();
  70.         I2C_INIT();
  71.     LED_GPIO_Config();
  72.         USART1_Config();
  73.         TIM5_Config();      //TIM5 2ms中断一次 提供系统时基
  74.         PWM_OUT_Config();   //PWM输出控制无刷电机 【TIM1 TIM4 提供八路PWM输出】
  75.         PWM_IN_Config();    //PWM输入捕捉初始化 使用TIM2输入捕捉
  76.         NRF24L01_Init();
  77.          LED_SHOW();
  78.          FLASH_Unlock();
  79.          EE_Init();          //EEPROM掉电保存数据
  80. }
  81. /*====================================================================================================*/
  82. /*====================================================================================================*
  83. **函数 : Sensor_Init
  84. **功能 : ================================【传感器初始化】============================================//
  85. **输入 : None
  86. **輸出 : None
  87. **备注 : None
  88. **====================================================================================================*/
  89. /*====================================================================================================*/
  90. void Sensor_Init(void)   
  91. {
  92.         flag.MpuExist = InitMPU6050();     //读取初始化成功标志  
  93.         flag.MagExist = Init_HMC5883L();   //传感器初始化成功   传感器存在的标志
  94.     flag.NrfExist = NRF24L01_Check();
  95.     NRF24L01_Mode(1);                  //设置24l01为发送模式
  96.         

  97.         OLED_P6x8Str(0,1,"ROLL:");         //OLED显示三个姿态欧拉角数值
  98.         OLED_P6x8Str(0,2,"PITCH:");
  99.         OLED_P6x8Str(0,3,"YAW:");
  100.    
  101.         OLED_P6x8Str(0,5,"YAW:");          //四个遥控器通道数据
  102.         OLED_P6x8Str(0,6,"THR:");
  103.         OLED_P6x8Str(56,5,"ROLL:");
  104.         OLED_P6x8Str(56,6,"PITCH:");
  105. }

  106. /*====================================================================================================*/
  107. /*====================================================================================================*
  108. **函数 : Screen_Update
  109. **功能 : 屏幕数据更新
  110. **输入 : None
  111. **輸出 : None
  112. **备注 : None
  113. **====================================================================================================*/
  114. /*====================================================================================================*/
  115. void Screen_Update(void)
  116. {
  117.         Dis_Float(1,40,AngE.Roll,1);
  118.         Dis_Float(2,40,AngE.Pitch,1);
  119.         Dis_Float(3,40,AngE.Yaw,1);
  120.     OLED_4num(4,5,RC_Data.YAW);
  121.         OLED_4num(4,6,RC_Data.THROTTLE);
  122.         OLED_4num(57,5,RC_Data.ROLL);
  123.         OLED_4num(58,6,RC_Data.PITCH);
  124. }
  125. //***********************************【划分时间片,分配任务】******************************************//

  126. //======================================【主循环执行函数】============================================//
  127. void loop(void)
  128. {                               //姿态解算 串级PID控制 在中断函数中执行 每2ms执行一次
  129.         // 250HZ
  130.         if(flag.Loop_250Hz){
  131.                 flag.Loop_250Hz=0;
  132.                 UsbCmdPro();                //USB接收上位机数据 【4ms执行一次】
  133.     FailSafeLEDAlarm();         //闪烁灯
  134.         }
  135.         
  136.         // 100HZ
  137.         if(flag.Loop_100Hz){
  138.                 flag.Loop_100Hz=0;
  139.     mavlink();                  //飞控板循环发送数据到上位机 【10ms执行一次】
  140.                 Screen_Update();            //更新OLED三个欧拉角和四个通道遥控器数据
  141.         }
  142.                 if(flag.Loop_10Hz){
  143.                 flag.Loop_10Hz=0;
  144.     EE_SAVE_Attitude_PID();     //如果调节了PID参数则用EEPROM保存数据 【100ms执行一次】
  145.         }
  146. }

  147. /*====================================================================================================*/
  148. /*====================================================================================================*
  149. **函数 : Time_slice
  150. **功能 :【时间片】
  151. **输入 : None
  152. **輸出 : None
  153. **备注 : None
  154. **====================================================================================================*/
  155. /*====================================================================================================*/
  156. void Time_slice(void)      //每中断一次执行一次本函数
  157. {
  158.   static u16 tick[3]={0,0,0};
  159.         
  160.         tick[0]++;tick[1]++;tick[2]++;
  161.         
  162.         if(tick[0]>=2){          //4ms    2次中断  一次2ms
  163.                  tick[0] = 0;
  164.                  flag.Loop_250Hz = 1;
  165.         }
  166.   if(tick[1]>=5){          //10ms   5次
  167.                 tick[1] = 0;
  168.                 flag.Loop_100Hz = 1;
  169.         }        
  170.   if(tick[2] >= 50)        {      //100ms  50次
  171.                 tick[2] = 0;
  172.                 flag.Loop_10Hz = 1;
  173.         }
  174. }
复制代码


评分

参与人数 1黑币 +5 收起 理由
zhougr + 5 很给力!

查看全部评分

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

使用道具 举报

沙发
ID:28823 发表于 2017-3-8 10:13 | 只看该作者
哇哇哇,大爱楼主的分享
回复

使用道具 举报

板凳
ID:200355 发表于 2017-5-13 17:05 | 只看该作者
正在做这方面的东西看着还挺好的
回复

使用道具 举报

地板
ID:95072 发表于 2017-8-2 22:58 | 只看该作者
挺好,赞
回复

使用道具 举报

5#
ID:242523 发表于 2017-10-24 18:45 | 只看该作者
特别好,赞
回复

使用道具 举报

6#
ID:253045 发表于 2017-11-24 15:25 | 只看该作者
有帮助
回复

使用道具 举报

7#
ID:260577 发表于 2017-12-12 11:58 | 只看该作者
感谢分享
回复

使用道具 举报

8#
ID:263025 发表于 2017-12-18 11:02 | 只看该作者
谢谢大佬
回复

使用道具 举报

9#
ID:329684 发表于 2018-5-14 16:08 | 只看该作者
谢谢楼主的分享
回复

使用道具 举报

10#
ID:331360 发表于 2018-5-20 23:05 来自手机 | 只看该作者
用stm32f4系列做的吗
回复

使用道具 举报

11#
ID:294865 发表于 2018-5-23 16:18 | 只看该作者
谢谢,真的不错
回复

使用道具 举报

12#
ID:381265 发表于 2018-7-31 14:04 | 只看该作者
楼主大爱
回复

使用道具 举报

13#
ID:381427 发表于 2018-7-31 20:25 | 只看该作者
是STM32F103的吗,我需要f103的代码
回复

使用道具 举报

14#
ID:396751 发表于 2018-9-11 23:49 | 只看该作者
感谢楼主分享
回复

使用道具 举报

15#
ID:247778 发表于 2018-12-29 21:32 | 只看该作者
有原理图吗,真心求
回复

使用道具 举报

16#
ID:151626 发表于 2019-3-29 16:56 | 只看该作者
最近在找这方面的资料  下载看一下
回复

使用道具 举报

17#
ID:502704 发表于 2019-4-1 20:30 | 只看该作者
很需要刚刚好奈斯
回复

使用道具 举报

18#
ID:519377 发表于 2019-4-23 10:46 | 只看该作者
太给力了!!
回复

使用道具 举报

19#
ID:261045 发表于 2019-9-9 16:25 | 只看该作者
谢谢!非常好的代码,代码非常完整!!ok!待会再看代码
回复

使用道具 举报

20#
ID:392405 发表于 2019-9-17 23:18 | 只看该作者
感谢楼主分享
回复

使用道具 举报

21#
ID:557635 发表于 2019-9-23 12:03 | 只看该作者
感谢分享
回复

使用道具 举报

22#
ID:611355 发表于 2019-9-29 11:52 | 只看该作者
一直想找飞控系统,终于找到了,大爱
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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