STM32CubeMx学习FreeRTOS的绝对延时和相对延时

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

在阻塞状态中 可以空闲出时间 来让低优先级的任务可以进行

有两种阻塞延时 一个是相对延时 也就是 

osDelay(500);

这样的osDelay可以让在到这里的时候,延时500ms

也就是程序到这里才500ms 不记程序前面所用的时间

而还有一个绝对延时

vTaskDelayUntil(&xlastwakeTime,500);

绝对延时指的是 加上程序自己跑的时间 全部的一起500ms

前面的参数是可以理解成程序开始的标志的地址

完整代码如:

void LED_Task2(void const * argument)
{
  /* USER CODE BEGIN LED_Task2 */
	TickType_t xlastwakeTime;
	xlastwakeTime =xTaskGetTickCount();
  /* Infinite loop */
  for(;;)
  {
		printfl("task2\r\n");
		HAL_Delay(200);
		vTaskDelayUntil(&xlastwakeTime,500);
		
  }
  /* USER CODE END LED_Task2 */
}

这样每次task2都500ms进入一次

500ms来一次

void LED_Task1(void const * argument)
{
  /* USER CODE BEGIN LED_Task1 */
  /* Infinite loop */
  for(;;)
  {
		printfl("task1\r\n");
		HAL_Delay(200);
		osDelay(500);
    
  }
  /* USER CODE END LED_Task1 */
}

task1就700ms来一次,是这样的



 设置按键任务  用来删除 创建 暂停 恢复任务

 

void key0_task(void const * argument)
{
  /* USER CODE BEGIN key0_task */
	static uint8_t Flag=1;
  /* Infinite loop */
  for(;;)
  {
		
     if(HAL_GPIO_ReadPin(key2_GPIO_Port,key2_Pin)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(key2_GPIO_Port,key2_Pin)==0)
			{
				if(Flag==1)
				{
					printfl("paused!\r\n");
					vTaskSuspend(LED2Handle);
					Flag=0;
					while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
				}
				else
				{
					printfl("hui fu 2!\r\n");
					vTaskResume(LED2Handle);
					Flag=1;
					while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
				}
			}
			
		}
	
		
		
		
  }
  /* USER CODE END key0_task */
}

暂停恢复任务

删除重建任务文章来源地址https://www.toymoban.com/news/detail-631422.html

void key1_task(void const * argument)
{
  /* USER CODE BEGIN key1_task */
  /* Infinite loop */
  for(;;)
  {
    if(HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0)
		{
			osDelay(20);
			if(HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0)
			{
				if(LED1Handle==NULL)
				{
					printfl("1 no ,creat 1\r\n");
					osThreadDef(LED1, LED_Task1, osPriorityNormal, 0, 128);
					LED1Handle = osThreadCreate(osThread(LED1), NULL);
					printfl("already creat1\r\n");
					while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
				}
				else
				{
					printfl("delete 1");
					vTaskDelete(LED1Handle);
					LED1Handle=NULL;
					while((HAL_GPIO_ReadPin(key1_GPIO_Port,key1_Pin)==0));
					
				}
			
			}
			
		}
		
		
		
  }
  /* USER CODE END key1_task */
}

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

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

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

相关文章

  • STM32基于HAL库和STM32CubeMX的实时操作系统FreeRtOS开发

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

    2024年02月21日
    浏览(60)
  • STM32 CubeMX (Freertos任务:创建、删除、挂起、恢复)

    学习使用Freertos第一步 FreeRTOS 任务管理,您需要掌握以下几个关键函数: 1. xTaskCreate() :用于创建一个任务,需要指定任务函数、任务名称、任务栈大小和优先级等参数。 2. vTaskDelete() :用于删除一个任务,可以由任务自身或其他任务调用。 3. vTaskDelay() :用于使当前任务进

    2024年02月12日
    浏览(37)
  • STM32cubemx对FreeRTOS的适配(工程模板配置)

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

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

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

    2024年02月13日
    浏览(64)
  • 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日
    浏览(46)
  • STM32 CubeMX (第三步Freertos中断管理和软件定时)

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

    2024年02月12日
    浏览(63)
  • STM32CubeMX+STM32F407+FreeRTos+LAN8720 以太网通信实现数据收发功能

    目录 前言 一、STM32CubeMX配置 二、修改代码 三、硬件测试 总结 该工程应用的以太网芯片是LAN8720,代码是基于STM32CUbeMx6.2.1配置生成的,在CubeMx中配置了ETH和LWIP,还有串口1和FREERTOS,最后通过创建任务函数实现udp的以太网数据收发功能。在测试中,可以在电脑的DOS窗口ping通在

    2024年02月08日
    浏览(54)
  • STM32 CubeMX (第一步Freertos任务管理:创建、删除、挂起、恢复)

    学习使用Freertos第一步 FreeRTOS 任务管理,您需要掌握以下几个关键函数: 1. xTaskCreate() :用于创建一个任务,需要指定任务函数、任务名称、任务栈大小和优先级等参数。 2. vTaskDelete() :用于删除一个任务,可以由任务自身或其他任务调用。 3. vTaskDelay() :用于使当前任务进

    2024年02月12日
    浏览(48)
  • STM32H743使用CubeMX配置Lwip、Freertos

    硬件:野火挑战者开发板STM32H743IIT6 软件版本: CubeMX 6.7.0 STM32CubeH7 Firmware Package V1.11.0 / 04-Nov-2022 原理图: 时钟树参数仅供参考 MPU配置需要查相关资料,一知半解 修改GPIO与硬件原理图对应,串口参数默认 参数配置与硬件对应 此处网络收发地址非常重要!!! 使能中断 串口

    2024年02月07日
    浏览(53)
  • 基于STM32CubeMx配置FreeRtos以及USB虚拟串口步骤详解

       Debug:推荐选择 Serial Wire (方便使用STLink打断点在线调试) 中间两项默认Disable就好 TimeBase Source:若需要配置FreeRtos则不能选择SysTick,随机选择一个TIM定时器即可,这里我选择TIM1定时器。 (解释:裸机的时钟源默认是SysTick,但是开启FreeRtos后,FreeRtos会占用SysTick,用于任

    2024年02月05日
    浏览(69)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包