你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32G0学习手册——FreeRTOS事件组

[复制链接]
STMCU小助手 发布时间:2022-10-27 20:01
1.创建好带有printf-stdarg.c的FreeRTOS的工程

2.修改main.c文件

  1. /* USER CODE BEGIN Includes */

  2. #include "FreeRTOS.h"
  3. #include "task.h"
  4. #include "queue.h"
  5. #include "semphr.h"
  6. #include "event_groups.h"
  7. #include <stdio.h>
  8. #include <string.h>

  9. /* USER CODE END Includes */

  10. /* USER CODE BEGIN PV */
  11. static TaskHandle_t AppTask_Handle = NULL;
  12. static TaskHandle_t KEY1Task_Handle = NULL;
  13. static TaskHandle_t KEY2Task_Handle = NULL;
  14. static TaskHandle_t LEDTask_Handle = NULL;

  15. static EventGroupHandle_t KeyEventGroup_Handle = NULL;

  16. static EventBits_t KeyEvent_Counting = 0;

  17. extern int f_printf(const char *format, ...);

  18. /* USER CODE END PV */

  19. /* Private function prototypes -----------------------------------------------*/
  20. void SystemClock_Config(void);
  21. /* USER CODE BEGIN PFP */

  22. static void AppTaskCreate(void);
  23. static void Key1TaaskCreate(void);
  24. static void Key2TaskCreate(void);
  25. static void LedTaskCreate(void);

  26. /* USER CODE END PFP */

  27. int main()
  28. {
  29.   /*
  30.    *
  31.   */
  32.   /* USER CODE BEGIN WHILE */
  33.   UBaseType_t xReturn = xTaskCreate((TaskFunction_t)AppTaskCreate,
  34.                                     (const char *) "APPTASKCREATE",
  35.                                     (uint16_t)     128,
  36.                                     (void *)       NULL,
  37.                                     (UBaseType_t)  1,
  38.                                     (TaskHandle_t*)&AppTask_Handle);
  39.   if(xReturn != NULL)
  40.         {
  41.                 f_printf("APPTASK CREATE PASS.\r\n");
  42.                 vTaskStartScheduler();
  43.         }

  44.   while (1)
  45.   {
  46.     /* USER CODE END WHILE */

  47.     /* USER CODE BEGIN 3 */
  48.   }
  49.   /* USER CODE END 3 */
  50. }


  51. /* USER CODE BEGIN 4 */
  52. static void AppTaskCreate(void)
  53. {
  54.         UBaseType_t xReturn = NULL;
  55.         
  56.         while(1)
  57.         {               
  58.                
  59.       /* The event group must be created first, otherwise the task cannot be executed.*/
  60.                 KeyEventGroup_Handle = xEventGroupCreate();

  61.         xReturn = xTaskCreate((TaskFunction_t)Key1TaaskCreate,
  62.                           (const char *)  "KEY1TASKCREATE",
  63.                           (uint16_t)      128,
  64.                           (void *)        NULL,
  65.                           (UBaseType_t)   3,
  66.                           (TaskHandle_t *)&KEY1Task_Handle);
  67.         if(xReturn != NULL)
  68.                         f_printf("KEY1TASK CREATE PASS.\r\n");
  69.                
  70.                 xReturn = xTaskCreate((TaskFunction_t)Key2TaskCreate,
  71.                           (const char *)  "KEY2TASKCREATE",
  72.                           (uint16_t)      128,
  73.                           (void *)        NULL,
  74.                           (UBaseType_t)   4,
  75.                           (TaskHandle_t *)&KEY2Task_Handle);
  76.         if(xReturn != NULL)
  77.           f_printf("KEY2TASK CREATE PASS.\r\n");
  78.                
  79.                 xReturn = xTaskCreate((TaskFunction_t)LedTaskCreate,
  80.                           (const char *)  "LEDTASKCREATE",
  81.                           (uint16_t)      128,
  82.                           (void *)        NULL,
  83.                           (UBaseType_t)   1,
  84.                           (TaskHandle_t *)&LEDTask_Handle);
  85.                
  86.         if(KeyEventGroup_Handle != NULL)
  87.                 {
  88.                         f_printf("KEY EVENTGROUP CREATE PASS.\r\n");
  89.                         vTaskDelete((TaskHandle_t)AppTask_Handle);
  90.                 }               
  91.         }
  92. }


  93. static void Key1TaaskCreate(void)
  94. {
  95.         while(1)
  96.         {
  97.                 if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
  98.                 {
  99.                         vTaskDelay(40);
  100.                         if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0))
  101.                         {
  102.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x01);
  103.                         }
  104.                 }
  105.                
  106.     vTaskDelay(100);
  107.         }
  108. }
  109. static void Key2TaskCreate(void)
  110. {
  111.         while(1)
  112.         {
  113.                 if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
  114.                 {
  115.                         vTaskDelay(40);
  116.                   if(HAL_GPIO_ReadPin(GPIOC,GPIO_PIN_12)==0)
  117.                         {
  118.                                 xEventGroupSetBits(KeyEventGroup_Handle,0x2);
  119.                         }
  120.                 }
  121.                 vTaskDelay(100);
  122.         }
  123. }


  124. static void LedTaskCreate(void)
  125. {
  126.         while(1)
  127.         {
  128.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x1, pdTRUE, pdTRUE, 10);
  129.                
  130.                 if((KeyEvent_Counting & 0x01) == 0x01)
  131.                 {
  132.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET);
  133.                         vTaskDelay(200);
  134.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET);
  135.                 }
  136.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x2, pdTRUE, pdTRUE, 10);
  137.                 if((KeyEvent_Counting & 0x02)==0x02)
  138.                 {
  139.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_RESET);
  140.                         vTaskDelay(200);
  141.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2,GPIO_PIN_SET);
  142.                 }
  143.                 KeyEvent_Counting = xEventGroupWaitBits ( KeyEventGroup_Handle, 0x3, pdTRUE, pdTRUE, 10);
  144.                 if((KeyEvent_Counting &0x03)==0x03)
  145.                 {
  146.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_RESET);
  147.                         vTaskDelay(200);
  148.                         HAL_GPIO_WritePin(GPIOB,GPIO_PIN_2|GPIO_PIN_1,GPIO_PIN_SET);
  149.                         xEventGroupClearBits(KeyEventGroup_Handle,0x03);
  150.                 }
  151.                
  152.                 vTaskDelay(50);
  153.         }
  154. }

  155. /* USER CODE END 4 */
复制代码


————————————————
版权声明:SCCELE

收藏 评论0 发布时间:2022-10-27 20:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版