找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1376|回复: 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 单片机教程网

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