Freertos学习09-软件定时器
一、概述
软件定时器是一种在单片机上实现定时功能的方法,可以用于周期性地执行任务或者延时执行任务。软件定时器由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);//启动定时器 }
本文作者:seekwhale13
本文链接:https://www.cnblogs.com/seekwhale13/p/17538118.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步