一、概述
软件定时器是一种在单片机上实现定时功能的方法,可以用于周期性地执行任务或者延时执行任务。软件定时器由FreeRTOS内核实现,不需要硬件支持。软件定时器只有在软件定时器回调函数被调用时才需要占用CPU时间。
本节主要设计以下内容:
- 软件定时器的API介绍
- 实例测试
二、软件定时器API
- 创建一个软件定时器
TimerHandle_t xTimerCreate(const char *pcTimerName,
TickType_t xTimerPeriod,
UBaseType_t uxAutoReload,
void *pvTimerID,
TimerCallbackFunction_t pxCallbackFunction);
参数 | 说明 |
---|---|
pcTimerName | 定时器的名称 |
xTimerPeriod | 定时器的周期,以FreeRTOS的时钟节拍为单位。定时器将在每个周期结束时触发回调函数。 |
uxAutoReload | 设置定时器是否自动重载 |
pvTimerID | 用户自定义的定时器ID |
pxCallbackFunction | 定时器到期时要执行的回调函数 |
返回值 | NULL,软件定时器无法创建;其他值,定时器句柄 |
//创建定时器xtimer1
xtimer1 = xTimerCreate("xtimer1",100,pdTRUE,( void * ) 0,vTimerCallback);
- 启动定时器:
BaseType_t xTimerStart(TimerHandle_t xTimer, TickType_t xTicksToWait);
其中,xTimer是要启动的定时器句柄,xTicksToWait是启动定时器前要等待的时钟节拍数。
3. 定时器回调函数:
void vTimerCallback(TimerHandle_t xTimer);
在定时器到期时,会调用注册的回调函数。该函数传入定时器的句柄。
4. 停止定时器:
BaseType_t xTimerStop(TimerHandle_t xTimer, TickType_t xTicksToWait);
其中,xTimer是要停止的定时器句柄,xTicksToWait是停止定时器前要等待的时钟节拍数。
5. 重启定时器
BaseType_t xTimerReset( TimerHandle_t xTimer, TickType_t xTicksToWait );
该个函数用于重置一个软件定时器。当调用xTimerReset函数时,定时器将被重置为其初始状态,并重新开始计时。示例用法如下:
// 创建一个定时器
TimerHandle_t xTimer = xTimerCreate("MyTimer", pdMS_TO_TICKS(1000), pdTRUE, NULL, vTimerCallback);
// 启动定时器
xTimerStart(xTimer, 0);
// 重置定时器
xTimerReset(xTimer, 0);
在上面的示例中,我们首先使用xTimerCreate函数创建了一个名为"MyTimer"的定时器,定时器的周期为1000毫秒,并指定了一个回调函数vTimerCallback。然后,我们使用xTimerStart函数启动定时器。最后,我们使用xTimerReset函数重置定时器。
请注意,xTimerReset函数的第二个参数是一个延迟时间,用于指定何时重置定时器。如果将延迟时间设置为0,则定时器将立即重置。如果将延迟时间设置为正值,则定时器将在指定的延迟时间后重置。
三、代码实例
#include <stdio.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/timers.h"
void vTimerCallback(TimerHandle_t xtimer1)
{
printf("xtimer task test!\r\n");
}
TimerHandle_t xtimer1;
void app_main(void)
{
//创建定时器xtimer1
xtimer1 = xTimerCreate("xtimer1",100,pdTRUE,( void * ) 0,vTimerCallback);
xTimerStart(xtimer1, 0);//启动定时器
}
标签:定时器,函数,Freertos,void,09,TimerHandle,xtimer1,xTimer
From: https://www.cnblogs.com/seekwhale13/p/17538118.html