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-658504.html

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

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

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

相关文章

  • 基于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】使用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)
  • STM32 CubeMX (第三步Freertos中断管理和软件定时)

    学习使用Freertos第三步 在 FreeRTOS 中,中断管理和软件定时: · taskENTER_CRITICAL() ·; 是一个函数在 FreeRTOS 中使用的,用于进入临界区(critical section)。在临界区内,中断会被禁用,这样可以确保在多任务环境下共享资源的安全性。你可以在需要保护共享资源的代码段中使用 ·

    2024年02月12日
    浏览(67)
  • 第一篇 STM32CubeMX创建STM32工程之工程创建、编译、下载

    使用stm32Cubemx创建stm32工程能更快、更准确的配置好stm32所需要的资源,提高单片机编程的效率。下面跟着小编一起来看一下如何快速创建stm32工程 双击打开stm32CubeMX软件,小编使用的是6.10.0。 选择 1.选择Access To MCU Selector进行芯片选择 2.在Commercial Part Number位置输入使用的单片

    2024年02月02日
    浏览(46)
  • STM32 CubeMX (第四步Freertos内存管理和CPU使用率)

    学习使用Freertos第四步 在 FreeRTOS 中,中断管理和软件定时: · taskENTER_CRITICAL() ·; 是一个函数在 FreeRTOS 中使用的,用于进入临界区(critical section)。在临界区内,中断会被禁用,这样可以确保在多任务环境下共享资源的安全性。你可以在需要保护共享资源的代码段中使用 ·

    2024年02月12日
    浏览(49)
  • 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)
  • STM32cubemx对FreeRTOS的适配(工程模板配置)

    本篇文章将带大家使用STM32cubemx对FreeRTOS进行工程模板的配置。 1.开始工程的创建: 2.芯片型号选择: 3.修改时钟为TIM8: 在FreeRTOS中SYSTICK需要为FreeRTOS提供心跳,故这里选择TIM8替换SYNTICK。 4.配置RCC: 5.配置FreeRTOS: 6.开启串口方便调试和观察: 7.工程路径及编译器选择等:

    2024年02月07日
    浏览(52)
  • STM32基于HAL库和STM32CubeMX的实时操作系统FreeRtOS开发

    1、FreeRTOS RTOS是一类操作系统,µC/OS,FreeRTOS,RTX,RT-Thread 等这些都是RTOS 类的操作系统 FreeRTOS 是众多RTOS 类操作系统中的一种,FreeRTOS 十分的小巧,可以在资源有限的微控制器中运行,FreeRTOS 也不仅仅局限于在微控制器中使用。就单从文件数量上来看FreeRTOS 要比µC/OS 少得多

    2024年02月21日
    浏览(64)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包