STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

news2025/1/19 11:07:06

STM32 CubeMX Freertos


STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

  • STM32 CubeMX Freertos
  • 前言
  • 一、STM32 CubeMX 配置
    • 时钟树配置
    • 使能串口,用于用于检查实验现象
    • 使用STM32 CubeMX 库,配置Freertos
    • 创建任务
  • 二、实验一:创建两个函数将LED闪烁
  • 实验现象
    • 使用 vTaskDelayUntil()绝对延时
  • 三,实验二:删除LED1任务和自身任务
  • 实验现象
  • 四,实验三:挂起和恢复
  • 实验现象
  • 总结


前言

学习使用Freertos第一步
FreeRTOS 任务管理,您需要掌握以下几个关键函数:

  1. xTaskCreate():用于创建一个任务,需要指定任务函数、任务名称、任务栈大小和优先级等参数。
  2. vTaskDelete():用于删除一个任务,可以由任务自身或其他任务调用。
  3. vTaskDelay():用于使当前任务进入阻塞状态,延迟一段时间后再继续执行。
  4. vTaskDelayUntil():类似于vTaskDelay(),但是可以实现周期性的延迟,使任务按照指定的时间间隔执行。
  5. vTaskSuspend()和vTaskResume():用于暂停和恢复一个任务的执行,暂停后的任务将不会被调度执行。
  6. xTaskResumeFromISR():在中断服务程序中恢复一个被挂起(暂停)的任务。
  7. uxTaskPriorityGet()和vTaskPrioritySet():用于获取和设置任务的优先级。
  8. uxTaskGetStackHighWaterMark():用于获取任务栈的剩余可用空间大小,可以用来检查任务是否使用了过多的栈空间。

一、STM32 CubeMX 配置

时钟树配置

在这里插入图片描述

使能串口,用于用于检查实验现象

在这里插入图片描述

使用STM32 CubeMX 库,配置Freertos

选择CMISS_V1接口就可以满足Freertos接口;且代码量比CMISS_V2小
在这里插入图片描述

创建任务

请添加图片描述

二、实验一:创建两个函数将LED闪烁

在这里插入图片描述

代码如下(示例):

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     printf("LED灭\r\n");		// printf输出字符串
     osDelay(1000);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 printf("LED亮\r\n");		// printf输出字符串
     osDelay(2000);
  }
  /* USER CODE END LED2Task */
}

实验现象

请添加图片描述
在这里插入图片描述

使用 vTaskDelayUntil()绝对延时

使能 vTaskDelayUntil函数
在这里插入图片描述

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     printf("LED灭\r\n");		// printf输出字符串
     vTaskDelayUntil(&xlaswketime,1000);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 printf("LED亮\r\n");		// printf输出字符串
     vTaskDelayUntil(&xlaswketime,2000);
  }
  /* USER CODE END LED2Task */
}


三,实验二:删除LED1任务和自身任务

/* USER CODE END Header_LED1Task */
void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     vTaskDelayUntil(&xlaswketime,500);
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 vTaskDelayUntil(&xlaswketime,500);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
	printf("5s后删除LED1任务,再5S删除自身任务\r\n");		// printf输出字符串
  /* Infinite loop */
  for(;;)
  {
		
     vTaskDelayUntil(&xlaswketime,5000);//5秒
		 vTaskDelete(LED1Handle);
		 printf("删除LED闪烁任务\r\n");		// printf输出字符串
		 vTaskDelayUntil(&xlaswketime,5000);//5秒
		 printf("删除自身任务\r\n");		// printf输出字符串
	   vTaskDelete(NULL);
		 printf("正常情况不会打印这段话\r\n");		// printf输出字符串

  }
  /* USER CODE END LED2Task */
}

实验现象

在这里插入图片描述

四,实验三:挂起和恢复

void LED1Task(void const * argument)
{
  /* USER CODE BEGIN LED1Task */
 TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
  /* Infinite loop */
  for(;;)
  {
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,1);
     vTaskDelayUntil(&xlaswketime,500);
		 HAL_GPIO_WritePin(GPIOC, GPIO_PIN_13,0);
		 vTaskDelayUntil(&xlaswketime,500);
  }
  /* USER CODE END LED1Task */
}

/* USER CODE BEGIN Header_LED2Task */
/**
* @brief Function implementing the LED2 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_LED2Task */
void LED2Task(void const * argument)
{
  /* USER CODE BEGIN LED2Task */
	TickType_t xlaswketime;
	xlaswketime = xTaskGetTickCount();//获取进入的时间
	printf("5s后暂停,再5S恢复\r\n");		// printf输出字符串
  /* Infinite loop */
  for(;;)
  {

     vTaskDelayUntil(&xlaswketime,5000);//5秒
	   vTaskSuspend(LED1Handle);
		 printf("暂停LED闪烁任务\r\n");		// printf输出字符串
		 vTaskDelayUntil(&xlaswketime,5000);//5秒
		 vTaskResume(LED1Handle);
		 printf("恢复LED闪烁任务\r\n");		// printf输出字符串
	
   
  }
  /* USER CODE END LED2Task */
}

实验现象

在这里插入图片描述

总结

学会 任务管理: 需要掌握并熟练任务的创建、删除、挂起、恢复和切换等操作,以及任务的优先级和调度机制。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antd中Switch组件的使用

<Switch> 是 Ant Design 中的一个组件&#xff0c;用于在开关之间切换。checkedChildren 是 <Switch> 组件的一个属性&#xff0c;用于指定在开关打开时显示的文本或 React 元素。 以下是 <Switch> 组件的基本语法&#xff1a; import { Switch } from ant…

【Vue-Router】路由过渡动效

在 Vue Router 中&#xff0c;你可以通过过渡动效&#xff08;Transition Effects&#xff09;为路由切换添加平滑的过渡效果&#xff0c;从而提升用户体验。过渡动效可以使用 Vue 的 <transition> 组件和 CSS 过渡来实现。 基本使用&#xff1a; 对导航使用动画&#…

【愚公系列】华为云系列之基于ModelBox搭建的AI寻车系统

文章目录 前言一、ModelBox简介1.ModelBox是什么2.AI开发遇到的问题和解决方案一2.1 相关问题2.2 解决方案 3.AI开发遇到的问题和解决方案二3.1 相关问题3.2 解决方案 4.ModelBox的功能5.ModelBox的其他特性6.ModelBox的应用场景 二、ModelBox搭建的AI寻车系统1.案例效果2.环境…

『虫无涯赠书01期』|〖测试设计思想〗

『虫无涯赠书01期』&#xff5c;〖测试设计思想〗 &#x1f498; 赠书 - 《测试设计思想》&#x1f9e1; 内容简介&#x1f49b; 作者简介&#x1f496; 本书内容&#x1f497; 读后感想&#x1f49d; 参与方式 &#x1f498; 赠书 - 《测试设计思想》 购书传送门&#xff1a;测…

应用 - 行为分析篇

前言 以商超项目为例&#xff0c;为了更好的给用户提供服务&#xff0c;我们需要了解到用户喜欢什么&#xff0c;我的产品中哪些是用户感兴趣的&#xff0c;哪些是不感兴趣的。我应该在推荐栏目中给用户推荐的内容是哪些。 基于这些业务场景&#xff0c;我们需要一套行为分析…

STL转GLTF【在线工具】

3DConvert 是一个可以进行3D模型格式转换的在线工具&#xff0c;支持多种3D模型格式进行在线预览和互相转换。 1、STL与GLTF格式简介 STL&#xff08;Stereo Lithography&#xff09;文件是一种用于3D打印的文件格式。它是由3D Systems公司开发的一种二进制文件格式&#xff0…

创意转写,文字催生:介绍有用的录音实时转写功能

我有一个朋友叫小敏&#xff0c;是一名记者。她在采访工作中常常遇到一个难题&#xff1a;采访过程中非常容易错过重要信息&#xff0c;到底要用哪款手机录音实时转写软件才能解决这个问题&#xff1f;于是有一天&#xff0c;她听说了一款神奇的录音转文字软件&#xff0c;决定…

84. 柱状图中最大的矩形(单调栈)

题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 解题思路&#xff1a; 方法一&#xff1a;暴力解法 矩形的面积由宽和高决定&#xff0c;可以枚举所有的高度&#xff0c;也就是固定高度&#xff0c;然后从当前高度所在的位置向…

创新方案|超越炒作 – 从产品驱动增长PLG到产品驱动销售PLS的务实策略指南

这篇文章探讨从产品驱动增长到产品驱动销售的策略&#xff0c;超越了产品驱动增长的炒作。尽管产品驱动增长模式被认为是科技公司的灵丹妙药&#xff0c;但要取得成功&#xff0c;通常需要结合更传统的企业模式的要素。研究表明&#xff0c;只有少数采用产品驱动增长模式的公司…

生信豆芽菜-ESTIMATE预测免疫评分

网址&#xff1a;http://www.sxdyc.com/immuneEstimateScore 一、ESTIMATE预测免疫评分介绍 ESTIMATE&#xff08;Estimation of STromal and Immune cells in MAlignant Tumor tissues using Expression data&#xff09;是一种用于预测肿瘤免疫评分的计算方法。它通过分析基因…

LC-相交链表(解法2)

LC-相交链表&#xff08;解法2&#xff09; 链接&#xff1a;https://leetcode.cn/problems/intersection-of-two-linked-lists/description/ 描述&#xff1a;给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在…

生态系统NPP及碳源、碳汇模拟教程

详情点击链接&#xff1a;生态系统NPP及碳源、碳汇模拟教程 一&#xff1a;CASA模型 1.1 碳循环模型 1.2 CASA模型原理 1.3 CASA下载与安装 1.4 CASA注意事项 二&#xff1a;CASA初步操作 2.1 ENVI界面 2.2 ENVI 数据及格式 2.3 基于ENVI的CASA模拟 2.4 CASA结果分析 …

第一张Web及基础与HTTP协议

dns与域名&#xff1a; 网络是基于tcp/ip协议进行通信以及链接 应用层——传输层——网络层——数据链路层——物理层 ip地址&#xff0c;我们每一台主机&#xff0c;都有唯一的地址标识&#xff08;固定的ip地址&#xff09; ip地址的作用&#xff1a; 1&#xff0c;区分用…

一阶RC低通滤波器[原理详细推导]

注意这里面的截止频率 因为前面的推导中的复阻抗里面多了一个f 这里的的函数是: 其中: f为输入信号的频率,f_B为滤波器的截止频率。 该函数的相位角φ&#xff0c;&#xff08;为其argument的反余弦值&#xff09;: 将函数带入有: Re(H(f)) Im(H(f)) 相位角φ为: φ…

重组金黄色葡萄球菌蛋白A(Recombinant Staphylococcal Protein A, r-SPA)——一种基因工程重组蛋白

品 名&#xff1a;重组金黄色葡萄球菌蛋白A&#xff08;Recombinant Staphylococcal Protein A, r-SPA&#xff09;规 格&#xff1a;1 mg&#xff0c;10 mg&#xff0c;100 mg&#xff0c;500 mg&#xff0c;特殊订制产品形式&#xff1a;冷冻干粉&#xff1b;冻干前缓冲…

ATFX汇市:澳洲联储公布会议纪要,美元指数重归103上方

环球汇市行情摘要—— 昨日&#xff0c;美元指数上涨0.29%&#xff0c;收盘在103.17点&#xff0c; 欧元贬值0.37%&#xff0c;收盘价1.0907点&#xff1b; 日元贬值0.41%&#xff0c;收盘价145.55点&#xff1b; 英镑贬值0.06%&#xff0c;收盘价1.2687点&#xff1b; 瑞…

软考高项-思维导图34-36(计算机高级系统项目管理师)

陆续更新一些软考高项的思维导图&#xff0c;都是一些必背知识点&#xff0c;希望可以帮助大家早日考过高项&#xff0c;早日当上高工&#xff0c;早日成为杭州E类人才。全部完整导图快速获取链接&#xff1a;计算机高级系统项目管理师-思维导图汇总 三十四、需求按层次分 三十…

ReBel 论文学习笔记

论文&#xff1a;《Combining Deep Reinforcement Learning and Search for Imperfect-Information Games》 地址&#xff1a;https://arxiv.org/abs/2007.13544v2 代码&#xff1a;https://github.com/facebookresearch/rebel 材料&#xff1a; BV1gt4y1k77C&#xff08;1小时…

LC-链表的中间节点(递归)

LC-链表的中间节点&#xff08;递归&#xff09; 链接&#xff1a;https://leetcode.cn/problems/middle-of-the-linked-list/description/ 描述&#xff1a;给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个…

Kali Linux是什么?它的主要用途是什么?

1. Kali Linux是什么&#xff1f; Kali Linux是一款基于Debian Linux的发行版&#xff0c;专注于网络安全和渗透测试。它由全球顶尖的安全专家和黑客社区维护开发&#xff0c;提供了丰富的工具和资源&#xff0c;用于测试网络、系统和应用程序的安全性。Kali Linux以其强大的功…