FreeRTOS定时器组

介绍

FreeRTOS软件定时器组的时基是基于系统时钟节拍实现的。创建软件定时器时,指定软件定时器的回调函数,在回调函数中实现相应的功能。FreeRTOS提供的软件定时器支持单次模式和周期性模式:单次模式就是用户创建了定时器并启动了定时器后,定时时间到将不再重新执行;周期模式就是此定时器会按照设置的时间周期重复去执行。

注意 :定时器回调函数是在定时器任务中执行的,实际应用中切不可在定时器回调函数中调用任何将定时器任务挂起的函数,比如vTaskDelay(),vTaskDelayUntil()以及非零延迟的消息队列和信号量相关的函数。将定时器任务挂起,会导致定时器任务负责的相关功能都不能正确执行了。

FreeRTOSConfig.h配置

#define configUSE_TIMERS 1

#include "timers.h"

相关函数

函数 xTimerCreate

在这里插入图片描述
在这里插入图片描述

函数 xTimerStart

在这里插入图片描述
在这里插入图片描述

函数 pvTimerGetTimerID

void *pvTimerGetTimerID( TimerHandle_t xTimer ); /* 定时器句柄*/

函数pvTimerGetTimerID用于返回使用函数xTimerCreate创建的软件定时器ID。
在这里插入图片描述

使用

定义Timer

static TimerHandle_t xTimers = NULL;					 
			xTimers = xTimerCreate("Timer",          /* 定时器名字 */
							       3000,    /* 定时器周期,单位时钟节拍 */
							       pdTRUE,          /* 周期性 */
							       (void * )0x01,      /* 定时器ID */
							       vTimerCallback); /* 定时器回调函数 */

			if(xTimers == NULL)
			{
				/* 没有创建成功,用户可以在这里加入创建失败的处理机制 */
			}
			else
			{
				 /* 启动定时器,系统启动后才开始工作 */
				 if(xTimerStart(xTimers, 100) != pdPASS)
				 {
					 /* 定时器还没有进入激活状态 */
				 }
			}		

回调函数


static void vTimerCallback(xTimerHandle pxTimer)
{
	uint32_t ulTimerID;

	configASSERT(pxTimer);

	/* 获取那个定时器时间到 */
	ulTimerID = (uint32_t)pvTimerGetTimerID(pxTimer);
	
//	/* 处理定时器0任务 */
//	if(ulTimerID == 0)
//	{
//		bsp_LedToggle(1);
//	}
	
	/* 处理定时器1任务 */
	if(ulTimerID == 1)
	{
			uint8_t data[]="This is a Timer";
			taskENTER_CRITICAL();   /* 进入临界区 */
			HAL_UART_Transmit(&huart1,data,sizeof(data),0xff);
			taskEXIT_CRITICAL();  	/* 退出临界区 */	
	}
}

参考文档

教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值