148 lines
3.5 KiB
C
148 lines
3.5 KiB
C
/**
|
||
******************************************************************************
|
||
* @file User\Os\os_timer.c
|
||
* @author 路淮
|
||
* @version v0.1
|
||
* @date 2026-05-21
|
||
* @brief 软件定时器管理
|
||
******************************************************************************
|
||
*/
|
||
|
||
/* Includes -------------------------------------------------------------------*/
|
||
#include "os_timer.h"
|
||
#include "task_ykc.h"
|
||
|
||
/* variables ------------------------------------------------------------------*/
|
||
TimerHandle_t YkcTimerHandle = NULL;
|
||
|
||
/* code -----------------------------------------------------------------------*/
|
||
|
||
|
||
/**
|
||
* @brief 软件定时器初始化
|
||
* @note 初始化YkcTimerHandle
|
||
* @param none
|
||
* @retval none
|
||
*/
|
||
void SwTimer_Init(void)
|
||
{
|
||
SwTimer_YkcTimer_Init();
|
||
}
|
||
|
||
/**
|
||
* @brief 创建软件定时器
|
||
* @param name 定时器名称
|
||
* @param period_ms 定时周期(ms)
|
||
* @param auto_reload true:周期模式 false:单次模式
|
||
* @param callback 定时器回调函数
|
||
* @retval TimerHandle_t 定时器句柄,NULL 表示创建失败
|
||
*/
|
||
TimerHandle_t SwTimer_Create(const char *name,
|
||
uint32_t period_ms,
|
||
bool auto_reload,
|
||
SwTimerCallback_t callback)
|
||
{
|
||
UBaseType_t reload = auto_reload ? pdTRUE : pdFALSE;
|
||
TimerHandle_t xTimer = xTimerCreate(name,
|
||
pdMS_TO_TICKS(period_ms),
|
||
reload,
|
||
NULL,
|
||
callback);
|
||
|
||
if (xTimer == NULL)
|
||
{
|
||
printf("SwTimer_Create Failed: %s\r\n", name);
|
||
}
|
||
|
||
return xTimer;
|
||
}
|
||
|
||
/**
|
||
* @brief 启动软件定时器
|
||
* @param xTimer 定时器句柄
|
||
* @retval none
|
||
*/
|
||
void SwTimer_Start(TimerHandle_t xTimer)
|
||
{
|
||
if (xTimer != NULL)
|
||
{
|
||
if (xTimerStart(xTimer, 0) != pdPASS)
|
||
{
|
||
printf("SwTimer_Start Failed\r\n");
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 停止软件定时器
|
||
* @param xTimer 定时器句柄
|
||
* @retval none
|
||
*/
|
||
void SwTimer_Stop(TimerHandle_t xTimer)
|
||
{
|
||
if (xTimer != NULL)
|
||
{
|
||
if (xTimerStop(xTimer, 0) != pdPASS)
|
||
{
|
||
printf("SwTimer_Stop Failed\r\n");
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 复位软件定时器
|
||
* @param xTimer 定时器句柄
|
||
* @retval none
|
||
*/
|
||
void SwTimer_Reset(TimerHandle_t xTimer)
|
||
{
|
||
if (xTimer != NULL)
|
||
{
|
||
if (xTimerReset(xTimer, 0) != pdPASS)
|
||
{
|
||
printf("SwTimer_Reset Failed\r\n");
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 创建充电桩状态检查定时器
|
||
* @note 500ms 周期,自动重载,遍历检查 1-6 号桩状态
|
||
* @param none
|
||
* @retval none
|
||
*/
|
||
void SwTimer_YkcTimer_Init(void)
|
||
{
|
||
YkcTimerHandle = SwTimer_Create("YkcTimer",
|
||
2500,
|
||
true,
|
||
ykc_timer_callback_function);
|
||
|
||
if (YkcTimerHandle != NULL)
|
||
{
|
||
SwTimer_Start(YkcTimerHandle);
|
||
printf("YkcTimer_Init\r\n");
|
||
}
|
||
else
|
||
{
|
||
printf("YkcTimer_Init Failed\r\n");
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @brief 修改定时器周期
|
||
* @param xTimer 定时器句柄
|
||
* @param period_ms 新周期(ms)
|
||
* @retval none
|
||
*/
|
||
void SwTimer_ChangePeriod(TimerHandle_t xTimer, uint32_t period_ms)
|
||
{
|
||
if (xTimer != NULL)
|
||
{
|
||
if (xTimerChangePeriod(xTimer, pdMS_TO_TICKS(period_ms), 0) != pdPASS)
|
||
{
|
||
printf("SwTimer_ChangePeriod Failed\r\n");
|
||
}
|
||
}
|
||
}
|