STM32Cubemx FreeRTOS Event

一、Cubemx 配置

选好芯片型号后,先进行sys的配置

时钟配置,f103c8t6标准板子只有高速,低速可以不用

 

打开板载led

 usart1配置 选择异步,其他默认

freertos配置,版本选择v2,v1没有事件相关函数

 生成工程

 

二、Eevent

 freertos.c

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "stdio.h"
#include "usart.h"
#include "event_groups.h"
/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

int fputc(int ch,FILE *f)
{
    HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF);
    return ch;
}

/* USER CODE END PTD */
/* Private function prototypes -----------------------------------------------*/
/* USER CODE BEGIN FunctionPrototypes */
// 定义事件组句柄
EventGroupHandle_t myEventGroup;

// 定义事件位
#define EVENT_BIT_1 (1 << 0)
#define EVENT_BIT_2 (1 << 1)
/* USER CODE END FunctionPrototypes */
  /* USER CODE BEGIN RTOS_TIMERS */
  /* start timers, add new ones, ... */
	  // 初始化事件组
    myEventGroup = xEventGroupCreate();
  /* USER CODE END RTOS_TIMERS */
void StartTask02(void *argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
  for(;;)
  {
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_RESET);// open led 4s
    osDelay(4000);
		HAL_GPIO_WritePin(GPIOC,GPIO_PIN_13,GPIO_PIN_SET);// close led 4s
    osDelay(4000);
		xEventGroupSetBits(myEventGroup, EVENT_BIT_1);
  }
  /* USER CODE END StartTask02 */
}
void StartTask03(void *argument)
{
  /* USER CODE BEGIN StartTask03 */
  /* Infinite loop */
  for(;;)
  {	
		printf("task2 ok!!\r\n");
	  // 触发事件2
    xEventGroupSetBits(myEventGroup, EVENT_BIT_2);
		osDelay(4000);
  }
  /* USER CODE END StartTask03 */
}
void StartDefaultTask(void *argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {
        EventBits_t eventBits = xEventGroupWaitBits(myEventGroup, EVENT_BIT_1 | EVENT_BIT_2, pdTRUE, pdFALSE, portMAX_DELAY);

        if ((eventBits & (EVENT_BIT_1 | EVENT_BIT_2)) == (EVENT_BIT_1 | EVENT_BIT_2)) {
            // 所有指定的事件都已发生
            // 执行任务1的操作
           	printf("task2 and task3 over!!\r\n");
            // 重置事件位,以便下次等待
            xEventGroupClearBits(myEventGroup, EVENT_BIT_1 | EVENT_BIT_2);
        }

    osDelay(4000);
  }
  /* USER CODE END StartDefaultTask */
}

运行效果

链接:https://pan.baidu.com/s/1ASV5C88yGT28ogq6OmUXIQ?pwd=ebuq 提取码:ebuq 

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chem4111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值