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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

木仔stm32f103rct6開發板移植FreeRTOS及引腳圖

[復制鏈接]
跳轉到指定樓層
樓主

單片機源程序如下:
  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. //任務優先級
  16. #define START_TASK_PRIO                1                      //操作系統主任務
  17. //任務堆棧大小        
  18. #define START_STK_SIZE                 128  
  19. //任務句柄
  20. TaskHandle_t StartTask_Handler;
  21. //任務函數
  22. void start_task(void *pvParameters);
  23. ///////////////////////////////////////

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

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

  42. //任務優先級
  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. //任務函數
  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);//設置系統中斷優先級分組4         
  63.         delay_init();                                                                 //延時函數初始化         
  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. //創建開始任務
  72.     xTaskCreate((TaskFunction_t )start_task,            //任務函數
  73.                 (const char*    )"start_task",          //任務名稱
  74.                 (uint16_t       )START_STK_SIZE,        //任務堆棧大小
  75.                 (void*          )NULL,                  //傳遞給任務函數的參數
  76.                 (UBaseType_t    )START_TASK_PRIO,       //任務優先級
  77.                 (TaskHandle_t*  )&StartTask_Handler);   //任務句柄              
  78.     vTaskStartScheduler();                              //開啟任務調度
  79. }
  80. /******************開始任務任務函數**********************/
  81. void start_task(void *pvParameters)
  82. {
  83.     taskENTER_CRITICAL();                               //進入臨界區
  84.         //創建KEY任務
  85.         xTaskCreate((TaskFunction_t )key_task,                //void key_task(void *pvParameters)      key任務函數
  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,         //任務優先級 2
  90.                 (TaskHandle_t*  )&KeyTask_Handler);     //任務句柄
  91.     //創建TASK1任務
  92.     xTaskCreate((TaskFunction_t )task1_task,            //void task1_task(void *pvParameters)    task1任務函數     
  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,       //任務優先級 3     
  97.                 (TaskHandle_t*  )&Task1Task_Handler);   //任務句柄
  98.     //創建TASK2任務
  99.     xTaskCreate((TaskFunction_t )task2_task,            //void task2_task(void *pvParameters)    task2任務函數
  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,       //任務優先級 4
  104.                 (TaskHandle_t*  )&Task2Task_Handler);   //任務句柄
  105.                
  106.                                                                
  107.                                                                
  108.     vTaskDelete(StartTask_Handler);                     //刪除開始任務
  109.     taskEXIT_CRITICAL();                                //退出臨界區
  110. }
  111. /****************key任務函數************************/
  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任務函數***********************/
  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++;                                                   //任務執1行次數加1 注意task1_num1加到255的時候會清零!!
  160.                 LED2=!LED2;
  161.                 vTaskDelay(2000);                                        //延時2s,也就是2000個時鐘節拍        
  162.         }
  163. }
  164. /***************task2任務函數***********************/
  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執行次數加1 注意task1_num2加到255的時候會清零!!
  176.     LED3=!LED3;
  177.                 printf("任務2已經執行:%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]); //填充區域
  181.                 //(u16 x,u16 y,u32 num,u8 len)
  182.                 LCD_ShowNum(198,111,task2_num,4);                               //顯示任務執行次數
  183.     vTaskDelay(2000);                                        //延時2s,也就是2000個時鐘節拍        
  184.         }
  185. }
復制代碼

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

評分

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

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产免费让你躁在线视频 | 亚洲精品粉嫩美女一区 | 欧美日韩精品一区二区三区视频 | 毛片在线看片 | 高清成人av | 美女午夜影院 | 在线观看国产精品一区二区 | 国产精品久久久久久久久久久久久 | 欧美11一13sex性hd | 欧美综合国产精品久久丁香 | 亚洲国产精久久久久久久 | www久| 欧美视频一区 | 精品国产乱码久久久久久丨区2区 | 在线成人 | www日本在线播放 | 亚洲一av | 天天看天天操 | 亚洲xx在线 | 五月综合激情在线 | 欧美精品在线免费 | 亚洲精品一区二三区不卡 | 成人在线黄色 | 精品视频在线免费观看 | 成人不卡视频 | 欧美一区二区三区在线观看 | 黄色大片免费网站 | 久久国内精品 | 国产精品久久久久久久久久 | 欧美激情黄色 | 激情欧美一区二区三区中文字幕 | 精品国产一区二区三区久久久蜜月 | 第四色影音先锋 | 亚洲国产欧美一区二区三区久久 | 最新av在线网址 | 日韩欧美一区二区三区 | 日日夜精品视频 | 欧美一区二区三区国产 | 欧美日韩亚洲在线 | 日本大片在线播放 | 国产精品成人一区二区三区 |