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

这篇具有很好参考价值的文章主要介绍了STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STM32 CubeMX Freertos



前言

学习使用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任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

HAL时基选择TIM1(不要选择滴答定时器;滴答定时器留给OS系统做时基)

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

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

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

使用STM32 CubeMX 库,配置Freertos

选择CMISS_V1接口就可以满足Freertos接口;且代码量比CMISS_V2小(CMISS_V2支持更多的RTOS接口,所以代码量比CMISS_V1多)
STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

创建任务

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

二、实验一:创建两个任务,LED闪烁

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

代码如下(示例):

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 */
}

实验现象

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机
STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

使用 vTaskDelayUntil()绝对延时

使能 vTaskDelayUntil函数
STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

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 */
}

实验现象

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

四,实验三:任务的挂起和恢复

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 */
}

实验现象

STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复),STM32 CubeMX,Rtos,stm32,嵌入式硬件,单片机

总结

学会 任务管理: 需要掌握并熟练任务的创建、删除、挂起、恢复和切换等操作,以及任务的优先级和调度机制。文章来源地址https://www.toymoban.com/news/detail-650620.html

到了这里,关于STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【复习笔记】FreeRTOS(三)任务挂起和恢复

    本文是FreeRTOS复习笔记的第三节,任务挂起和恢复,使用的开发板是stm32f407VET6,创建两个任务,task1负责闪烁LED,task2负责按键控制,当按键按下时控制任务挂起,按键再次按下恢复任务,并通过串口打印任务状态。 上一篇文章: 【复习笔记】FreeRTOS(二)创建和删除任务 首先

    2024年02月07日
    浏览(30)
  • 【STM32】利用CubeMX对FreeRTOS用按键控制任务

    对于FreeRTOS中的操作,最常用的就是创建、删除、暂停和恢复任务。 此次实验目标: 1.创建任务一:LED1每间隔1秒闪烁一次,并通过串口打印 2.创建任务二:LED2每间隔0.5秒闪烁一次,并通过串口打印 3.创建任务三:通过KEY1实现对任务一的创建和删除。 按键按下以后如果有任

    2024年02月13日
    浏览(69)
  • STM32 CubeMX (第二步Freertos任务通信:队列、信号量、互斥量,事件组,任务通知)

    学习使用Freertos第二步 在 FreeRTOS 中,任务通信可以通过以下函数来实现: xQueueCreate() :用于创建一个消息队列。可以设置队列长度和每个消息的大小。 xQueueSend() :将一条消息发送到队列中。可以选择阻塞或非阻塞发送。 xQueueReceive() :从队列中接收一条消息。可以选择阻塞

    2024年02月11日
    浏览(45)
  • 基于STM32CubeMX创建FreeRTOS—以STM32F429为例

    目录 1. 实验任务 2. 使用STM32CubeMX创建基础工程 2.1 使用STM32CubeMX创建项目 2.2 创建新项目 2.3 时钟设置 2.4 时钟配置树 2.5 修改时钟基准,打开串行调试 2.6 配置串口 2.7 配置状态指示灯 2.8 FreeRTOS配置 2.9 配置工程输出项 3. 代码编辑 3.1 printf重映射 3.1.1 使用ARMCC 5编译器时的print

    2024年01月22日
    浏览(43)
  • 【STM32&RT-Thread零基础入门】 6. 线程创建应用(线程挂起与恢复)

    硬件:STM32F103ZET6、ST-LINK、usb转串口工具、4个LED灯、1个蜂鸣器、4个1k电阻、2个按键、面包板、杜邦线 在上一个任务中,通过停止命令把线程删除后,线程在系统中就不存在了,也无法再使线程重新运行。例如输入stop_led_thread命令后,led停止闪烁,但也无法重新开启LED灯闪烁

    2024年02月11日
    浏览(37)
  • 【STM32】使用CubeMX快速创建FreeRTOS的基础工程,基于正点原子

    【STM32】HAL库 新建MDK工程 【STM32】HAL库 串口轮询发送 【STM32】HAL库 LED闪烁、流水灯 【STM32】HAL库 定时器中断 【STM32】HAL库 外部中断 使用STM32F103C8T6开发板,用STM32CubeMX配置FreeRTOS,可以适配正点原子FreeRTOS所有实验的基础工程 HAL的时基不能选择系统定时器 PA0和PA1输出模式,

    2024年02月19日
    浏览(51)
  • FreeRTOS学习笔记—任务创建和删除

    🎀 文章作者:二土电子 🌸 关注文末公众号获取其他资料和工程文件! 🐸 期待大家一起学习交流! FreeRTOS 的任务创建和删除相关的API函数有下面几个 xTaskCreate() 使用动态的方法创建一个任务 xTaskCreateStatic() 使用静态的方法创建一个任务 xTaskCreateRestricted() 创建一个使用 M

    2024年02月12日
    浏览(35)
  • STM32 CubeMX LwIP + freertOS 移植

    开发板: 官方 STM32F746  MCU型号:STM32F746NGH 网卡型号:LAN8742A  原理图如下 先用裸机测试LAN8742A的网卡驱动 使用CubeMX创建工程 系统时钟和时基定时器如下 无系统LWIP协议栈设置,静态IP地址,关闭DHCP 生产代码,下载进开发板。开发板网口与电脑网口通过网线直连,设置电脑本

    2024年01月16日
    浏览(87)
  • 搭建STM32F407的Freertos系统(基于STM32CubeMX)

           本人长期开发Linux、Windows上应用软件,一直以来MCU开发有所接触,但较少(最近项目需要,小公司么,都得会,被逼的),好在有STM32CubeMX这样工具,貌似就是我想要的工具。         本次demo目标立下:         1. 搭建或移植FreeRTOS到STM32上,毕竟对于长期在Linux环境

    2024年02月10日
    浏览(63)
  • STM32CubeMX+FATFS+FREERTOS读写U盘

    软件:STM32CubeMX V6.6.1 、 KEIL5 V5.29 硬件:STM32F429ZET6 USB_OTG_FS:PA11/PA12引脚 USART1:PA9/PA10,方便输出调试信息 1)SYS下载方式选择SW方式,因为要使用FREERTOS,提前将时钟源修改为TIM7(其他定时器也可以) 2) RCC设置,选择高速外部晶振HSE(根据具体硬件选择) 3)USART1设置,方便输出调

    2024年01月18日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包