# SoftTimer **Repository Path**: Lin_g/soft-timer ## Basic Information - **Project Name**: SoftTimer - **Description**: 软件定时器 软件定时器 - **Primary Language**: C - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 3 - **Created**: 2021-11-25 - **Last Updated**: 2025-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # soft_timer ## 介绍 使用硬件定时器作为时间基准, 可以分出多个软件定时器任务, 取代传统的标志位判断方式, 更优雅更便捷地管理程序的时间触发时序。 如果芯片是51内核时, 请切换到分支: 51-kernel ## API 初始化软件定时器 void soft_timer_init(void); 创建一个软件定时器 void soft_timer_create(void (*callback)(void), uint16_t ms, soft_timer_cb_e type); - 参数 callback: 回调函数 ms: 定时时间(单位: mS) type: 回调类型 删除一个软件定时器 void soft_timer_delete(void (*callback)(void)); - 参数 callback: 回调函数 重启动软件定时器 void soft_timer_restart(void (*callback)(void)); - 参数 callback: 回调函数 暂停软件定时器 void soft_timer_suspend(void (*callback)(void)); - 参数 callback: 回调函数 软件定时器扫描 决定一个时间片的时长 void soft_timer_tick(void); 时间到执行回调函数, 主函数调用 void soft_timer_loop_async(void); ## 使用 1. 初始化软件定时器 soft_timer_init(void); 2. 创建软件定时器 soft_timer_create(void (*callback)(void), uint16_t ms, soft_timer_cb_e type); 3. 硬件定时器中断里调用软件定时器扫描 soft_timer_tick(void); 4. 主函数里调用, 时间到执行回调函数 soft_timer_loop_async(void); ## 例程 ```cpp #include "SoftTimer.h" void callbackTime5ms(void) { /* 用户代码 */ /* 暂停5ms回调, 等待下次在 callbackTime100ms 中重启 */ soft_timer_suspend(callbackTime5ms); } void callbackTime10ms(void) { /* 用户代码 */ } void callbackTime100ms(void) { /* 用户代码 */ /* 重启5ms回调 */ /* 可适用于执行此函数的代码时, 延时一定的时间来执行另一处的代码(另一个软件定时器回调) */ soft_timer_restart(callbackTime5ms); } int main(void) { soft_timer_init(); soft_timer_create(callbackTime5ms, 5, SOFT_TIMER_CB_MAIN); /* 5ms回调, 主函数里执行回调函数 */ soft_timer_create(callbackTime10ms, 10, SOFT_TIMER_CB_IRQ); /* 10ms回调, 中断里执行回调函数 */ soft_timer_create(callbackTime100ms, 100, SOFT_TIMER_CB_MAIN); /* 100ms回调, 主函数里执行回调函数 */ soft_timer_suspend(callbackTime5ms); /* 暂停5ms回调, 在 callbackTime100ms 中重启 */ soft_timer_delete(callbackTime10ms); /* 删除此回调函数下的软件定时器 */ while (1) { soft_timer_loop_async(); } } /* 硬件定时器中断 */ void HAL_SYSTICK_Callback(void) { soft_timer_tick(); } ```