找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2744|回復: 1
打印 上一主題 下一主題
收起左側

STM32 FREERTOS移植教程與源碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:379138 發(fā)表于 2018-7-25 20:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
原子FREERTOS移植教程,包括例程源碼

全部資料51hei下載地址:
STM32F103 FreeRTOS開發(fā)手冊V1.1.pdf (10.79 MB, 下載次數(shù): 35)
FreeRTOS任務掛起和恢復.rar (1.23 MB, 下載次數(shù): 31)


單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "lcd.h"
  6. #include "sdram.h"
  7. #include "key.h"
  8. #include "FreeRTOS.h"
  9. #include "task.h"

  10. //任務優(yōu)先級
  11. #define START_TASK_PRIO                1
  12. //任務堆棧大小       
  13. #define START_STK_SIZE                 128  
  14. //任務句柄
  15. TaskHandle_t StartTask_Handler;
  16. //任務函數(shù)
  17. void start_task(void *pvParameters);

  18. //任務優(yōu)先級
  19. #define TASK1_TASK_PRIO                2
  20. //任務堆棧大小       
  21. #define TASK1_STK_SIZE                 128  
  22. //任務句柄
  23. TaskHandle_t Task1Task_Handler;
  24. //任務函數(shù)
  25. void task1_task(void *pvParameters);

  26. //任務優(yōu)先級
  27. #define TASK2_TASK_PRIO                3
  28. //任務堆棧大小       
  29. #define TASK2_STK_SIZE                 128  
  30. //任務句柄
  31. TaskHandle_t Task2Task_Handler;
  32. //任務函數(shù)
  33. void task2_task(void *pvParameters);

  34. //任務優(yōu)先級
  35. #define KEY_TASK_PRIO                4
  36. //任務堆棧大小       
  37. #define KEY_STK_SIZE                 128  
  38. //任務句柄
  39. TaskHandle_t KeyTask_Handler;
  40. //任務函數(shù)
  41. void key_task(void *pvParameters);

  42. int main(void)
  43. {
  44.     HAL_Init();                     //初始化HAL庫   
  45.     Stm32_Clock_Init(360,25,2,8);   //設置時鐘,180Mhz
  46.         delay_init(180);                //初始化延時函數(shù)
  47.         uart_init(115200);              //初始化串口
  48.     LED_Init();                     //初始化LED
  49.         KEY_Init();                                                //初始化按鍵
  50.        
  51.     //創(chuàng)建開始任務
  52.     xTaskCreate((TaskFunction_t )start_task,            //任務函數(shù)
  53.                 (const char*    )"start_task",          //任務名稱
  54.                 (uint16_t       )START_STK_SIZE,        //任務堆棧大小
  55.                 (void*          )NULL,                  //傳遞給任務函數(shù)的參數(shù)
  56.                 (UBaseType_t    )START_TASK_PRIO,       //任務優(yōu)先級
  57.                 (TaskHandle_t*  )&StartTask_Handler);   //任務句柄               
  58.     vTaskStartScheduler();          //開啟任務調度
  59. }

  60. //開始任務任務函數(shù)
  61. void start_task(void *pvParameters)
  62. {
  63.     taskENTER_CRITICAL();           //進入臨界區(qū)
  64.         //創(chuàng)建KEY TASK任務
  65.     xTaskCreate((TaskFunction_t )key_task,            
  66.                 (const char*    )"key_task",           
  67.                 (uint16_t       )KEY_STK_SIZE,        
  68.                 (void*          )NULL,                  
  69.                 (UBaseType_t    )KEY_TASK_PRIO,        
  70.                 (TaskHandle_t*  )&KeyTask_Handler);
  71.                                
  72.     //創(chuàng)建TASK1任務
  73.     xTaskCreate((TaskFunction_t )task1_task,            
  74.                 (const char*    )"task1_task",           
  75.                 (uint16_t       )TASK1_STK_SIZE,        
  76.                 (void*          )NULL,                  
  77.                 (UBaseType_t    )TASK1_TASK_PRIO,        
  78.                 (TaskHandle_t*  )&Task1Task_Handler);   
  79.     //創(chuàng)建TASK2任務
  80.     xTaskCreate((TaskFunction_t )task2_task,     
  81.                 (const char*    )"task2_task",   
  82.                 (uint16_t       )TASK2_STK_SIZE,
  83.                 (void*          )NULL,
  84.                 (UBaseType_t    )TASK2_TASK_PRIO,
  85.                 (TaskHandle_t*  )&Task2Task_Handler);
  86.     vTaskDelete(StartTask_Handler); //刪除開始任務
  87.     taskEXIT_CRITICAL();            //退出臨界區(qū)
  88. }

  89. //key任務函數(shù)
  90. void key_task(void *pvParameters)
  91. {
  92.         u8 key;
  93.        
  94.         while(1)
  95.         {
  96.                 key=KEY_Scan(0);
  97.                 switch(key)
  98.                 {
  99.                         case WKUP_PRES:
  100.                                 vTaskSuspend(Task1Task_Handler);
  101.                                 printf("Task1 Suspend!!!\r\n");
  102.                                 break;
  103.                         case KEY1_PRES:
  104.                                 vTaskResume(Task1Task_Handler);
  105.                                 printf("Task1 Resume!!!\r\n");
  106.                                
  107.                 }
  108.                        
  109.                 vTaskDelay(10);
  110.         }
  111. }

  112. //task1任務函數(shù)
  113. void task1_task(void *pvParameters)
  114. {
  115.         u8 task1_num=0;
  116.        
  117.         while(1)
  118.         {
  119.                 task1_num++;        //任務執(zhí)1行次數(shù)加1 注意task1_num1加到255的時候會清零!!
  120.                 LED0=!LED0;
  121.                 printf("任務1已經執(zhí)行:%d次\r\n",task1_num);

  122.         vTaskDelay(1000);                           //延時1s,也就是1000個時鐘節(jié)拍       
  123.         }
  124. }

  125. //task2任務函數(shù)
  126. void task2_task(void *pvParameters)
  127. {
  128.         u8 task2_num=0;
  129.        
  130.         while(1)
  131.         {
  132.                 task2_num++;        //任務2執(zhí)行次數(shù)加1 注意task1_num2加到255的時候會清零。
  133.         LED1=!LED1;
  134.                 printf("任務2已經執(zhí)行:%d次\r\n",task2_num);
  135.         vTaskDelay(1000);                           //延時1s,也就是1000個時鐘節(jié)拍       
  136.         }
  137. }

復制代碼


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

使用道具 舉報

沙發(fā)
ID:20672 發(fā)表于 2018-9-22 11:27 | 只看該作者
謝謝分享~~~~
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表