【STM32】FreeRTOS事件组学习

这篇具有很好参考价值的文章主要介绍了【STM32】FreeRTOS事件组学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

事件组(Event Group)

一个任务执行之前需要经过多个条件进行判断,当条件全部满足或多个条件中的某一个条件满足才执行。

实验:创建两个任务,一个事件组,当按键一二三都按过一遍才打印。

实现:FreeRTOS在CubeMX中使用V1版本的时候,没法设置Events,必须手动添加,或者是使用V2版本。

这里使用V1版本,在【STM32】FreeRTOS互斥量学习基础上修改代码实现

第一步:创建事件组

/* USER CODE BEGIN FunctionPrototypes */

//创建事件组

EventGroupHandle_t myEventGroup=NULL;

/* USER CODE END FunctionPrototypes */

第二步,初始化

void MX_FREERTOS_Init(void) {
  /* USER CODE BEGIN Init */
  //事件组初始化
  myEventGroup=xEventGroupCreate( );
  xEventGroupClearBits(myEventGroup,0X000);
  /* USER CODE END Init */
 
  /* Create the thread(s) */
  /* definition and creation of Task1 */
  osThreadDef(Task1, StartDefaultTask, osPriorityNormal, 0, 128);
  Task1Handle = osThreadCreate(osThread(Task1), NULL);

  /* definition and creation of Task2 */
  osThreadDef(Task2, StartTask02, osPriorityNormal, 0, 128);
  Task2Handle = osThreadCreate(osThread(Task2), NULL);

  /* USER CODE BEGIN RTOS_THREADS */
  /* add threads, ... */
  /* USER CODE END RTOS_THREADS */

}

第三步,任务一中按键加置位实现

void StartDefaultTask(void const * argument)
{
  /* USER CODE BEGIN StartDefaultTask */
  /* Infinite loop */
  for(;;)
  {

		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_2)==0)
			{
				printf("KEY1\r\n");
				xEventGroupSetBits(myEventGroup,0X001);
				osDelay(2000);
			}
		}
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_3)==0)
			{
				printf("KEY2\r\n");
				xEventGroupSetBits(myEventGroup,0X010);
				osDelay(2000);
			}
		}
		if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_4)==0)
			{
				printf("KEY3\r\n");
				xEventGroupSetBits(myEventGroup,0X100);
				osDelay(2000);
			}
		}
  }
  /* USER CODE END StartDefaultTask */
}

第四步,任务二中,任务组检查加打印实现

void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
	uint32_t Event=0;
  for(;;)
  {
    Event=xEventGroupWaitBits(myEventGroup,0X111,pdTRUE,pdTRUE,portMAX_DELAY);
		if(Event==0X111)
		{
			printf("OK\r\n");
		}
  }
  /* USER CODE END StartTask02 */
}

【STM32】FreeRTOS事件组学习,FreeRTOS,STM32,stm32,嵌入式硬件,单片机

现象:观察到,必须KEY1,KEY2,KEY3都按下过才能引发事件组打印OK。

如果KEY1,KEY2,KEY3其中一个按下就可以引发事件组打印OK的话,可以进行以下修改:文章来源地址https://www.toymoban.com/news/detail-655433.html

void StartTask02(void const * argument)
{
  /* USER CODE BEGIN StartTask02 */
  /* Infinite loop */
	uint32_t Event=0;
  for(;;)
  {
    Event=xEventGroupWaitBits(myEventGroup,0X111,pdTRUE,pdFALSE,portMAX_DELAY);
		if(Event==0X111)
		{
			printf("OK\r\n");
		}
  }
  /* USER CODE END StartTask02 */
}

到了这里,关于【STM32】FreeRTOS事件组学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 嵌入式学习笔记——STM32的时钟树

    在之前的所有代码编程的过程中,似乎每次都绕不开一个叫做时钟使能的东西,当时我们是在数据手册上直接看其挂接在那条时钟线上的,那么STM32内部的时钟到底是怎么一个构型呢,本文来对此做一个介绍。 老规矩,一个新的名词出现,首先需要搞清楚它是个啥,下图中对

    2024年02月02日
    浏览(53)
  • 嵌入式学习笔记——STM32硬件基础知识

    上一篇中我们重点是讲了一下怎么搭建开发环境以及怎么下载烧录的过程,这都是解决的电脑端的开发环境问题,还没有到实际的开发板上,我们的单片机是都是焊接在开发板上的,PCB上有着它所需的工作电路。并不是直接给供电电压就可以让其工作的,本文主要是简介一下

    2024年01月22日
    浏览(68)
  • STM32开发环境搭建&工程创建(嵌入式学习)

    简介 STM32CubeMX是STMicroelectronics公司提供的一款集成开发环境(IDE)工具,用于快速配置和初始化STM32微控制器系列的软件工程。它提供了图形化界面和交互式工具,使开发者能够轻松地生成STM32微控制器的初始化代码和配置文件。 STM32CubeMX具有以下主要功能和特点: 微控制器

    2024年02月11日
    浏览(66)
  • 嵌入式学习stm32基础知识(期末复习)

    1. 计算机的体系架构 冯诺依曼架构 ​ 在完整的计算机系统中,包含五个部分,储存器,运算器,控制器输入设备和输出设备。 改进的冯诺依曼架构 改进型架构的各模块的高速数据交换中心利用储存器这个大容量,极大的提高了效率。 哈佛架构 ​ 哈佛结构数据空间和地址

    2024年02月07日
    浏览(64)
  • STM32的定时器详解(嵌入式学习)

    想要了解STM32的时钟系统 点击这里跳转——》STM32的时钟系统(嵌入式学习) 建议先看看时钟树如何配置 点击这里跳转——》STM32的时钟树配置(嵌入式学习) 跳转——》STM32的时钟基础详解(嵌入式学习) 跳跳转——》STM32的时钟源详解(嵌入式学习) SysTick又称滴答定时

    2024年02月13日
    浏览(67)
  • STM32&ARM体系结构(嵌入式学习)

    STM32是意法半导体(STMicroelectronics)公司推出的一系列32位ARM Cortex-M微控制器(MCU)产品系列。它们基于ARM架构,并且具有广泛的应用领域,包括工业自动化、消费电子、医疗设备、通信、汽车电子等。 STM32系列提供了多个产品系列,以满足不同应用需求和性能要求。其中常见

    2024年02月08日
    浏览(62)
  • 嵌入式学习笔记——STM32的USART通信概述

    上两篇文章中,已经实现了GPIO的通用输出以及通用输出模式,从本文开始,笔者将开始有关GPIO的复用功能的介绍,首先是最常用复用功能——串口,本文主要是介绍一些关于通信以及串口的基本概念。 通信协议:通信双方进行信息交换(接收或发送)要满足的规则,而这个规

    2023年04月08日
    浏览(55)
  • 单片机STM32看门狗详解(嵌入式学习)

    单片机STM32的看门狗(Watchdog)是一种硬件定时器,用于监控系统的运行状态并在出现故障或死锁时采取措施以恢复正常操作。看门狗的主要功能是定期检查系统是否正常运行,并在系统出现问题时触发复位操作。 STM32系列单片机通常配备了内置的看门狗定时器(通常称为独立

    2024年02月13日
    浏览(61)
  • 【嵌入式学习-STM32F103-USART串口通信】

    4-1 基本流程 4-2 整体代码 4-2-1 main.c 4-2-2 Serial.c 4-2-3 Serial.h 5-1 查询 5-2 中断 5-3 整体代码 5-3-1 main.c 5-3-2 Serial.c 5-3-3 Serial.h 6-1 使用状态机接收数据包的思路 6-2 串口收发HEX数据包 6-2-1 main.c 6-2-2 Serial.c 6-2-3 Serial.h 6-3串口收发文本数据包 6-3-1 main.c 6-3-2 Serial.c 6-3-3 Serial.h 全双工:打

    2024年02月15日
    浏览(58)
  • 正点原子STM32嵌入式学习-keil5安装教程

    前言:本人没有什么嵌入式的经验,但是看到硬件的同事做开发板比较好玩,比较感兴趣。刚好有这样一个机会,可以跟随《原子教你玩STM32(库函数版)》课程线下学习,在此,将本次课程的学习做一个记录。相信对我这样一个小白来说,帮助还是会非常大的。 目录 一.下

    2024年03月10日
    浏览(71)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包