找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1773|回復: 0
打印 上一主題 下一主題
收起左側(cè)

木仔stm32f103rct6開發(fā)板移植FreeRTOS及引腳圖

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:140644 發(fā)表于 2022-10-15 16:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

單片機源程序如下:
  1. #include "sys.h"
  2. #include "delay.h"
  3. #include "usart.h"
  4. #include "led.h"
  5. #include "timer.h"
  6. #include "lcd.h"
  7. #include "key.h"
  8. #include "exti.h"
  9. #include "FreeRTOS.h"
  10. #include "task.h"
  11. /************************************************
  12. STM32F103RCT6  木子小板測試 2022 4 24
  13. Program Size: Code=21412 RO-data=1856 RW-data=504 ZI-data=23160  
  14. ************************************************/
  15. //任務優(yōu)先級
  16. #define START_TASK_PRIO                1                      //操作系統(tǒng)主任務
  17. //任務堆棧大小        
  18. #define START_STK_SIZE                 128  
  19. //任務句柄
  20. TaskHandle_t StartTask_Handler;
  21. //任務函數(shù)
  22. void start_task(void *pvParameters);
  23. ///////////////////////////////////////

  24. //任務優(yōu)先級
  25. #define KEY_TASK_PRIO                  2                      //按鍵任務
  26. //任務堆棧大小        
  27. #define KEY_STK_SIZE                 128  
  28. //任務句柄
  29. TaskHandle_t KeyTask_Handler;
  30. //任務函數(shù)
  31. void key_task(void *pvParameters);
  32. ///////////////////////////////////////

  33. //任務優(yōu)先級
  34. #define TASK1_TASK_PRIO                3                      //任務1
  35. //任務堆棧大小        
  36. #define TASK1_STK_SIZE                 128  
  37. //任務句柄
  38. TaskHandle_t Task1Task_Handler;
  39. //任務函數(shù)
  40. void task1_task(void *pvParameters);
  41. ///////////////////////////////////////

  42. //任務優(yōu)先級
  43. #define TASK2_TASK_PRIO                4                      //任務2
  44. //任務堆棧大小        
  45. #define TASK2_STK_SIZE                 128  
  46. //任務句柄
  47. TaskHandle_t Task2Task_Handler;                  //TaskHandle_t Task2Task_Handler   KEY_0外中斷恢復任務2
  48. //任務函數(shù)
  49. void task2_task(void *pvParameters);
  50. ///////////////////////////////////////

  51. #include "stm32f10x.h"
  52. /*************LCD刷屏時使用的顏色*****************/
  53. int lcd_discolor[14]={WHITE,BLACK,BLUE,BRED,      
  54.                                                 GRED,GBLUE,RED,MAGENTA,               
  55.                                                 GREEN,CYAN,YELLOW,BROWN,                        
  56.                                                 BRRED,GRAY
  57. };
  58. /***********************************************/
  59. int main(void)
  60. {
  61. //        u8 ss;
  62.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//設置系統(tǒng)中斷優(yōu)先級分組4         
  63.         delay_init();                                                                 //延時函數(shù)初始化         
  64.         uart_init(38400);                                                             //初始化串口
  65.         LED_Init();                                                                               //初始化LED
  66.         KEY_Init();                                                                               //初始化按鍵
  67.         EXTIX_Init();                                                                       //初始化外部中斷
  68.         Lcd_Init();                                                       //初始化LCD
  69.         POINT_COLOR = RED;
  70.         LCD_ShowString(30,90,"2022/4/25");
  71. //創(chuàng)建開始任務
  72.     xTaskCreate((TaskFunction_t )start_task,            //任務函數(shù)
  73.                 (const char*    )"start_task",          //任務名稱
  74.                 (uint16_t       )START_STK_SIZE,        //任務堆棧大小
  75.                 (void*          )NULL,                  //傳遞給任務函數(shù)的參數(shù)
  76.                 (UBaseType_t    )START_TASK_PRIO,       //任務優(yōu)先級
  77.                 (TaskHandle_t*  )&StartTask_Handler);   //任務句柄              
  78.     vTaskStartScheduler();                              //開啟任務調(diào)度
  79. }
  80. /******************開始任務任務函數(shù)**********************/
  81. void start_task(void *pvParameters)
  82. {
  83.     taskENTER_CRITICAL();                               //進入臨界區(qū)
  84.         //創(chuàng)建KEY任務
  85.         xTaskCreate((TaskFunction_t )key_task,                //void key_task(void *pvParameters)      key任務函數(shù)
  86.                 (const char*    )"key_task",           
  87.                 (uint16_t       )KEY_STK_SIZE,          //任務堆棧大小任務堆棧大小#define KEY_STK_SIZE                 128   
  88.                 (void*          )NULL,                  //
  89.                 (UBaseType_t    )KEY_TASK_PRIO,         //任務優(yōu)先級 2
  90.                 (TaskHandle_t*  )&KeyTask_Handler);     //任務句柄
  91.     //創(chuàng)建TASK1任務
  92.     xTaskCreate((TaskFunction_t )task1_task,            //void task1_task(void *pvParameters)    task1任務函數(shù)     
  93.                 (const char*    )"task1_task",           
  94.                 (uint16_t       )TASK1_STK_SIZE,        //任務堆棧大小#define TASK1_STK_SIZE                 128   
  95.                 (void*          )NULL,                  //
  96.                 (UBaseType_t    )TASK1_TASK_PRIO,       //任務優(yōu)先級 3     
  97.                 (TaskHandle_t*  )&Task1Task_Handler);   //任務句柄
  98.     //創(chuàng)建TASK2任務
  99.     xTaskCreate((TaskFunction_t )task2_task,            //void task2_task(void *pvParameters)    task2任務函數(shù)
  100.                 (const char*    )"task2_task",   
  101.                 (uint16_t       )TASK2_STK_SIZE,        //任務堆棧大小 #define TASK2_STK_SIZE                 128
  102.                 (void*          )NULL,                  //
  103.                 (UBaseType_t    )TASK2_TASK_PRIO,       //任務優(yōu)先級 4
  104.                 (TaskHandle_t*  )&Task2Task_Handler);   //任務句柄
  105.                
  106.                                                                
  107.                                                                
  108.     vTaskDelete(StartTask_Handler);                     //刪除開始任務
  109.     taskEXIT_CRITICAL();                                //退出臨界區(qū)
  110. }
  111. /****************key任務函數(shù)************************/
  112. void key_task(void *pvParameters)
  113. {
  114.         u8 key,statflag=0;
  115.         while(1)
  116.         {
  117.                 key=KEY_Scan(0);
  118.                 switch(key)
  119.                 {
  120.                           case WKUP_PRES:
  121.                                 statflag=!statflag;
  122.                                 if(statflag==1)
  123.                                 {
  124.                                         vTaskSuspend(Task1Task_Handler);                   //掛起任務
  125.                                         //LCD_ShowString(30,10,200,16,16,"           \r\n");
  126.                                         LCD_ShowString(30,60,"Task1 Run\r\n");
  127.                                         //LCD_ShowString(30,10,"Susp Task1 \r\n");        
  128.                                         LCD_ShowString(30,60,"Task1 Run\r\n");
  129.                                 }
  130.                                 else if(statflag==0)
  131.                                 {
  132.                                         vTaskResume(Task1Task_Handler);                           //恢復任務1
  133.                                         //LCD_ShowString(30,10,200,16,16,"Resum Task1\r\n");
  134.                                         LCD_ShowString(30,60,"Task1 Run\r\n");
  135.                                 }               
  136.                                 break;
  137.                           case KEY1_PRES:
  138.                                 vTaskSuspend(Task2Task_Handler);                     //掛起任務2
  139.                                 //LCD_ShowString(30,40,200,16,16,"           \r\n");
  140.                                 LCD_ShowString(30,60,"Task1 Run\r\n");
  141.                                 //LCD_ShowString(30,40,200,16,16,"Susp Task2 \r\n");        
  142.                                 LCD_ShowString(30,60,"Task1 Run\r\n");
  143.                                 break;
  144.                 }
  145.                 vTaskDelay(10);                                                             //延時10ms
  146.         }
  147. }
  148. /***************task1任務函數(shù)***********************/
  149. void task1_task(void *pvParameters)
  150. {
  151.         u8 task1_num=0;
  152.         POINT_COLOR = BLACK;
  153.   LCD_DrawRectangle(5,110,115,314);                                //畫一個矩形        
  154.         LCD_DrawLine(5,130,115,130);                                           //畫線
  155.         POINT_COLOR = BLUE;
  156.         LCD_ShowString(6,111,"Task1 Run:000");
  157.         while(1)
  158.         {
  159.                 task1_num++;                                                   //任務執(zhí)1行次數(shù)加1 注意task1_num1加到255的時候會清零�。�
  160.                 LED2=!LED2;
  161.                 vTaskDelay(2000);                                        //延時2s,也就是2000個時鐘節(jié)拍        
  162.         }
  163. }
  164. /***************task2任務函數(shù)***********************/
  165. void task2_task(void *pvParameters)
  166. {
  167.         u8 task2_num=0;
  168.         POINT_COLOR = BLACK;
  169.   LCD_DrawRectangle(125,110,234,314);                        //畫一個矩形        
  170.         LCD_DrawLine(125,130,234,130);                                         //畫線
  171.         POINT_COLOR = BLUE;
  172.         LCD_ShowString(126,111,"Task2 Run:000");
  173.         while(1)
  174.         {
  175.                 task2_num++;                                                   //任務2執(zhí)行次數(shù)加1 注意task1_num2加到255的時候會清零��!
  176.     LED3=!LED3;
  177.                 printf("任務2已經(jīng)執(zhí)行:%d次\r\n",task2_num);
  178.                 POINT_COLOR =RED;
  179.                 LCD_ShowString(30,60,"Task2 Run\r\n,");
  180.                 LCD_Fill(126,131,233,313,lcd_discolor[13-task2_num%14]); //填充區(qū)域
  181.                 //(u16 x,u16 y,u32 num,u8 len)
  182.                 LCD_ShowNum(198,111,task2_num,4);                               //顯示任務執(zhí)行次數(shù)
  183.     vTaskDelay(2000);                                        //延時2s,也就是2000個時鐘節(jié)拍        
  184.         }
  185. }
復制代碼

Keil代碼下載: FreeRTOS編譯通過保存.7z (1.58 MB, 下載次數(shù): 19)

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規(guī)則

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

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

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