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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2992|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

自己移植的FreeRTOS+MPU6050姿態(tài)測試代碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:640600 發(fā)表于 2021-11-20 17:52 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
自己學(xué)習(xí)FreeRTOS和MPU6050時寫的一個姿態(tài)測試程序,希望有大佬發(fā)表相關(guān)意見!僅僅是做了一些簡單的測試!!!  但是Row角的偏移有點大!!!


單片機源程序如下:
  1. /*
  2. *************************************************************************
  3. *                             包含的頭文件
  4. *************************************************************************
  5. */
  6. /* 系統(tǒng)標(biāo)準(zhǔn)頭文件 */
  7. #include <string.h>          //字符串操作相關(guān)函數(shù)
  8. #include <stdio.h>           //標(biāo)準(zhǔn)輸入輸出
  9. #include <limits.h>          //高等大數(shù)據(jù)定義
  10. #include <stdlib.h>          //內(nèi)存操作相關(guān)函數(shù)

  11. /* FreeRTOS頭文件 */
  12. #include "FreeRTOS.h"         //FreeRTOS系統(tǒng)配置頭文件
  13. #include "task.h"             //創(chuàng)建任務(wù)頭文件
  14. #include "queue.h"            //內(nèi)核隊列頭文件
  15. #include "semphr.h"           //信號量頭文件
  16. #include "event_groups.h"     //事件處理頭文件
  17. #include "list.h"             //鏈表頭文件
  18.         

  19. /* 開發(fā)板硬件bsp頭文件 */
  20. #include "stm32f10x.h"
  21. #include "delay.h"
  22. #include "usart.h"
  23. #include "bsp_usart.h"
  24. #include "bsp_led.h"
  25. #include "bsp_key.h"
  26. //#include "bsp_i2c_ee.h"  //軟件I2C通訊底層
  27. //#include "bsp_i2c_gpio.h"//軟件I2C通訊底層IO口
  28. //#include "bsp_i2c_ee.h"    //硬件I2C底層
  29. #include "bsp_TiMbase.h"   
  30. #include "bsp_AdvanceTim.h"
  31. #include "mpu6050.h"
  32. #include "mpu6050_app.h"
  33. #include "inv_mpu.h"
  34. #include "inv_mpu_dmp_motion_driver.h"

  35. /**************************** 任務(wù)塊 ********************************/
  36. /*   仿照正點原子的按照任務(wù)的相關(guān)性來進(jìn)行聲明和定義所有的類型等變量
  37. *
  38. */
  39. /* 創(chuàng)建任務(wù)函數(shù)句柄 */
  40. static TaskHandle_t AppTaskCreate_Handle=NULL;
  41. /* 創(chuàng)建任務(wù)函數(shù)堆棧大小 */
  42. #define AppTask_STK_SIZE  512
  43. /* 創(chuàng)建任務(wù)函數(shù)任務(wù)優(yōu)先級 */
  44. #define AppTask_TASK_PRIO  1
  45. /* 創(chuàng)建任務(wù)函數(shù)聲明 */
  46. static void AppTaskCreate(void);/* 用于創(chuàng)建任務(wù) */

  47. /* Work任務(wù)函數(shù)句柄 */
  48. static TaskHandle_t Work_TaskHandle=NULL;
  49. /* Work任務(wù)函數(shù)堆棧大小 */
  50. #define Work_STK_SIZE  512
  51. /* Work任務(wù)函數(shù)任務(wù)優(yōu)先級 */
  52. #define Work_TASK_PRIO  2
  53. /* Work任務(wù)函數(shù)聲明 */
  54. static void Work_Task(void* parameter);/* Work任務(wù)相關(guān)任務(wù) */

  55. // /* Receive2任務(wù)函數(shù)句柄 */
  56. //static TaskHandle_t Receive2_TaskHandle=NULL;
  57. // /* Receive2任務(wù)函數(shù)堆棧大小 */
  58. //#define Receive2_STK_SIZE  512
  59. // /* Receive2任務(wù)函數(shù)任務(wù)優(yōu)先級 */
  60. //#define Receive2_TASK_PRIO  3
  61. // /* Receive2任務(wù)函數(shù)聲明 */
  62. //static void Receive2_Task(void* parameter);/* Receive2任務(wù)相關(guān)任務(wù) */

  63. // /* KEY任務(wù)函數(shù)句柄 */
  64. //static TaskHandle_t KEY_TaskHandle=NULL;
  65. // /* KEY任務(wù)函數(shù)堆棧大小 */
  66. //#define KEY_STK_SIZE  512
  67. // /* KEY任務(wù)函數(shù)任務(wù)優(yōu)先級 */
  68. //#define KEY_TASK_PRIO  3
  69. // /* KEY任務(wù)函數(shù)聲明 */
  70. //static void KEY_Task(void* parameter);/* KEY任務(wù) */


  71. /**************************** 任務(wù)句柄 ********************************/
  72. /*
  73. * 任務(wù)句柄是一個指針,用于指向一個任務(wù),當(dāng)任務(wù)創(chuàng)建好之后,它就具有了一個任務(wù)句柄
  74. * 以后我們要想操作這個任務(wù)都需要通過這個任務(wù)句柄,如果是自身的任務(wù)操作自己,那么
  75. * 這個句柄可以為NULL。
  76. */

  77. /********************************** 內(nèi)核對象句柄 *********************************/
  78. /*
  79. * 信號量,消息隊列,事件標(biāo)志組,軟件定時器這些都屬于內(nèi)核的對象,要想使用這些內(nèi)核
  80. * 對象,必須先創(chuàng)建,創(chuàng)建成功之后會返回一個相應(yīng)的句柄。實際上就是一個指針,后續(xù)我
  81. * 們就可以通過這個句柄操作這些內(nèi)核對象。
  82. *
  83. * 內(nèi)核對象說白了就是一種全局的數(shù)據(jù)結(jié)構(gòu),通過這些數(shù)據(jù)結(jié)構(gòu)我們可以實現(xiàn)任務(wù)間的通信,
  84. * 任務(wù)間的事件同步等各種功能。至于這些功能的實現(xiàn)我們是通過調(diào)用這些內(nèi)核對象的函數(shù)
  85. * 來完成的
  86. *
  87. */

  88. /******************************* 宏定義 ************************************/
  89. /*
  90. * 當(dāng)我們在寫應(yīng)用程序的時候,可能需要用到一些宏定義。
  91. */


  92. /******************************* 全局變量聲明 ************************************/
  93. /* 當(dāng)我們在寫應(yīng)用程序的時候,可能需要用到一些全局變量。
  94. */

  95. /*
  96. *************************************************************************
  97. *                             函數(shù)聲明
  98. *************************************************************************
  99. */
  100. static void BSP_Init(void);/* 硬件初始化 */


  101. /* 裸機驅(qū)動測試主函數(shù) */
  102. //int main(void)
  103. //{
  104. //        delay_init();                    //延時函數(shù)初始化          
  105. //        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);
  106. //        uart_init(115200);                 //串口初始化為115200
  107. //       
  108. //        DHT11_Init();       //DHT11初始化
  109. //        while(1)
  110. //        {
  111. //                DHT11_Read_Data(&temperature,&humidity);
  112. //                printf("%0.2d℃ %0.2d%%\r\n",temperature,humidity);
  113. //                delay_ms(1000);       
  114. //        }
  115. //}

  116. /*****************************************************************
  117.   * @brief  主函數(shù)
  118.   * @param  無
  119.   * @retval 無
  120.   * @note   第一步:開發(fā)板硬件初始化
  121.             第二步:創(chuàng)建APP應(yīng)用任務(wù)
  122.             第三步:啟動FreeRTOS,開始多任務(wù)調(diào)度
  123.   ****************************************************************/
  124. int main(void)
  125. {
  126.         BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */
  127.        
  128.   /* 開發(fā)板硬件初始化 */
  129.         BSP_Init();
  130.        
  131.         /* 創(chuàng)建AppTaskCreate任務(wù) */
  132.         xReturn = xTaskCreate( (TaskFunction_t)  AppTaskCreate,         /* 任務(wù)入口函數(shù) */
  133.                                (const char *  )  "AppTaskCreate",       /* 任務(wù)名稱 */
  134.                          (uint16_t      )  AppTask_STK_SIZE,      /* 任務(wù)棧大小 */
  135.                          (void *        )  NULL,                  /* 任務(wù)入口函數(shù)參數(shù) */
  136.                          (UBaseType_t   )  AppTask_TASK_PRIO,     /* 任務(wù)優(yōu)先級 */
  137.                          (TaskHandle_t *)  &AppTaskCreate_Handle);/* 任務(wù)控制塊指針(句柄) */

  138.     if(xReturn == pdTRUE)/* 檢測任務(wù)是否創(chuàng)建成功 */
  139.         {        printf("任務(wù)AppTaskCreate創(chuàng)建成功,開啟任務(wù)調(diào)度!\r\n"); }               
  140.         else{return -1;}
  141.        
  142.         vTaskStartScheduler();/* 啟動任務(wù),開啟調(diào)度 */
  143.        
  144.         while(1); /* 正常不會執(zhí)行到這里 用于判斷是否調(diào)度出錯 */               
  145. }

  146. /***********************************************************************
  147.   * @ 函數(shù)名  : AppTaskCreate
  148.   * @ 功能說明: 為了方便管理,所有的任務(wù)創(chuàng)建函數(shù)都放在這個函數(shù)里面
  149.   * @ 參數(shù)    : 無
  150.   * @ 返回值  : 無
  151.   **********************************************************************/
  152. static void AppTaskCreate(void)
  153. {
  154.         BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */
  155.        
  156.         taskENTER_CRITICAL();  /* 進(jìn)入臨界段 防止創(chuàng)建多個任務(wù)被打斷 */
  157.                                                                                                                                                                                        
  158.         xReturn = xTaskCreate( (TaskFunction_t) Work_Task,         /* 任務(wù)入口函數(shù) */
  159.                                (const char *  ) "Work_Task",       /* 任務(wù)名稱 */
  160.                                (uint16_t      ) Work_STK_SIZE,     /* 任務(wù)棧大小 */
  161.                          (void *        ) NULL,                /* 任務(wù)入口函數(shù)參數(shù) */
  162.                          (UBaseType_t   ) Work_TASK_PRIO,    /* 任務(wù)優(yōu)先級 */
  163.                          (TaskHandle_t *) &Work_TaskHandle); /* 任務(wù)控制塊指針(句柄) */                                                  
  164.     if(xReturn == pdPASS){ printf("創(chuàng)建任務(wù)Work_Task成功!\r\n"); }/* 檢測任務(wù)是否創(chuàng)建成功 */
  165.         else{printf("創(chuàng)建任務(wù)Work_Task失敗!\r\n");}
  166.        
  167. //        xReturn = xTaskCreate( (TaskFunction_t) KEY_Task,          /* 任務(wù)入口函數(shù) */
  168. //                         (const char *  ) "KEY_Task",        /* 任務(wù)名稱 */
  169. //                         (uint16_t      ) KEY_STK_SIZE,      /* 任務(wù)棧大小 */
  170. //                         (void *        ) NULL,              /* 任務(wù)入口函數(shù)參數(shù) */
  171. //                         (UBaseType_t   ) KEY_TASK_PRIO,     /* 任務(wù)優(yōu)先級 */
  172. //                         (TaskHandle_t *) &KEY_TaskHandle);  /* 任務(wù)控制塊指針(句柄) */  
  173. //    if(xReturn == pdPASS){ printf("創(chuàng)建任務(wù)KEY_Task成功!\r\n"); }/* 檢測任務(wù)是否創(chuàng)建成功 */
  174. //        else{printf("創(chuàng)建任務(wù)KEY_Task失敗!\r\n");}
  175.        
  176.     vTaskDelete(AppTaskCreate_Handle);/* 刪除AppTaskCreate任務(wù) */
  177.        
  178.     taskEXIT_CRITICAL();  /* 退出臨界段開始正常執(zhí)行程序 */       
  179. }

  180. /***********************************************************************
  181.   * @ 函數(shù)名  : Work_Task
  182.   * @ 功能說明: 任務(wù)的相關(guān)操作信息調(diào)試任務(wù)
  183.   * @ 參數(shù)    : 無
  184.   * @ 返回值  : 無
  185.   **********************************************************************/
  186. static void Work_Task(void* parameter)
  187. {
  188. //        BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */       
  189.         while(1)
  190.         {       
  191.        
  192.                 MPU6050_AppWork();
  193.                
  194.                 vTaskDelay(1); //延時10個Tick  啟動調(diào)度
  195.         }
  196. }
  197. /***********************************************************************
  198.   * @ 函數(shù)名  : EventSet_Task
  199.   * @ 功能說明: 任務(wù)的相關(guān)操作信息調(diào)試任務(wù)
  200.   * @ 參數(shù)    : 無
  201.   * @ 返回值  : 無
  202.   **********************************************************************/
  203. //static void Receive2_Task(void* parameter)
  204. //{
  205. //        BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */
  206. //        while(1)
  207. //        {

  208. //                LED2_TOGGLE;
  209. //                vTaskDelay(10); /* 任務(wù)延時10個tick 啟動調(diào)度器 */
  210. //        }
  211. //}
  212. /***********************************************************************
  213.   * @ 函數(shù)名  : KEY_Task
  214.   * @ 功能說明: 讀取按鍵 控制相關(guān)任務(wù)掛起還是恢復(fù)
  215.   * @ 參數(shù)    : 無  
  216.   * @ 返回值  : 無
  217.   **********************************************************************/
  218. //static void KEY_Task(void *parameter)
  219. //{
  220. //        BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */
  221. //        while(1)
  222. //        {//按鍵掃描判斷
  223. //                if( Key_Scan(KEY1_GPIO_PORT,KEY1_GPIO_PIN) == KEY_ON)//KEY1
  224. //                {
  225. //      printf ( "KEY1被按下\n" );
  226. //                        LED2_TOGGLE;
  227. //                }
  228. //         
  229. //                if( Key_Scan(KEY2_GPIO_PORT,KEY2_GPIO_PIN) == KEY_ON)//KEY2
  230. //                {
  231. //      printf ( "KEY2被按下\n" );
  232. //                        LED3_TOGGLE;
  233. //                }               
  234. //                vTaskDelay(10); /* 任務(wù)延時10個tick 啟動調(diào)度器 */
  235. //        }               
  236. //}

  237. /***********************************************************************
  238.   * @ 函數(shù)名  : BSP_Init
  239.   * @ 功能說明: 硬件初始化
  240.   * @ 參數(shù)    : 無
  241.   * @ 返回值  : 無
  242.   **********************************************************************/
  243. void BSP_Init(void)
  244. { BaseType_t xReturn = pdTRUE; /* 定義一個創(chuàng)建信息返回值,默認(rèn)為pdTRUE */
  245.         /*
  246.          * STM32中斷優(yōu)先級分組為4,即4bit都用來表示搶占優(yōu)先級,范圍為:0~15
  247.          * 優(yōu)先級分組只需要分組一次即可,以后如果有其他的任務(wù)需要用到中斷,
  248.          * 都統(tǒng)一用這個優(yōu)先級分組,千萬不要再分組,切忌。
  249.          */       
  250.         NVIC_PriorityGroupConfig( NVIC_PriorityGroup_4 );
  251.     /* 延時函數(shù)初始化 */
  252.         delay_init();
  253.           /* LED初始化 */
  254.         LED_GPIO_Config();       
  255.     /* KEY按鍵初始化 */
  256.         Key_GPIO_Config();
  257.         /* 串口1初始化-->調(diào)試打印        */
  258.         uart_init(115200);/* 正點原子驅(qū)動 */
  259.         /* 串口2初始化-->匿名4軸上位機使用 */
  260.         USART_Config();/* 野火驅(qū)動 */
  261.         /* TIM1的PWM輸出CH1-CH1N BDT剎車通道初始化 */
  262.         ADVANCE_TIM_Init();
  263.        
  264.         /* 初始化MPU6050 GPIO等 */
  265.         xReturn = MPU_Init();       
  266.         printf("MPU6050_Init:%ld\r\n",xReturn);       
  267.        
  268.         /* mpu6050,dmp初始化及檢測 */
  269.         xReturn = mpu_dmp_init();
  270.         printf("MPU6050dmp初始化:%ld\r\n",xReturn);
  271.        
  272. }



  273. /********************************END OF FILE****************************/
復(fù)制代碼

Keil代碼下載:
D3球形機器人(10).7z (371.77 KB, 下載次數(shù): 62)




評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:962202 發(fā)表于 2024-4-22 09:45 | 只看該作者
謝分享了,
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 99精品欧美一区二区三区 | 国产精品高潮呻吟久久久久 | 国产成人a亚洲精品 | 狠狠爱免费视频 | 一区二区三区久久 | 日日操夜夜操天天操 | 99视频久| 亚洲视频一区在线播放 | 久久欧美高清二区三区 | 99精品欧美一区二区三区 | 国产高清无av久久 | 五月天天色 | 在线国产欧美 | 亚洲欧美视频在线观看 | 欧美成人在线影院 | 精品毛片 | 91中文视频 | 成年人网站在线观看视频 | 91久久国产综合久久 | 久久久久亚洲视频 | 四虎永久免费地址 | 一区二区三区四区国产 | av免费在线播放 | 国产精品视频一二三区 | 国产一级网站 | 91精品国产91久久久久久吃药 | 丝袜一区二区三区 | 天天综合永久入口 | 久久久久久久久精 | 天天看天天操 | 日韩精品一区二区三区中文字幕 | 亚洲区一区二区 | 欧美中文字幕一区二区三区亚洲 | 日本久草视频 | 黄a免费网络 | 亚洲一区久久 | 国精产品一区一区三区免费完 | 偷拍亚洲色图 | 中文字幕免费中文 | 欧美国产亚洲一区二区 | 亚洲精品国产电影 |