0
点赞
收藏
分享

微信扫一扫

FreeRTOS的软件定时器配置与使用

配置FreeRTOSConfing.h文件

#define configTICK_RATE_HZ              ( ( TickType_t ) 1000 )  //计数时间周期1ms
#define configUSE_TIMERS 1 //开启定时器
#define configTIMER_TASK_PRIORITY ( configMAX_PRIORITIES - 1 ) //设置软件定时器优先级
#define configTIMER_QUEUE_LENGTH 32 //设置软件定时器队列长度
#define configTIMER_TASK_STACK_DEPTH ( configMINIMAL_STACK_SIZE * 2 ) //设置软件定时器堆栈大小
记得引入定时器头文件times.h

定义软件定时器句柄

TimerHandle_t Tim_Report_Sat;

 定义初始化,开始,停止和回调

//软件定时初始化
void Tim_Report_Sta_Init(void)
{
if (Tim_Report_Sat == NULL)
{

Tim_Report_Sat = xTimerCreate("Report Sta", //定时器名字,用于调试目的,方便识别不同的定时器
REPORT_STA_TIME, //定时器周期,单位系统时钟节拍
true, //选择周期模式还是单次模式,若参数为pdTRUE,则表示选择周期模式,若参数为pdFALSE,则表示选择单次模式
0, //定时器ID,当创建不同的定时器,但使用相同的回调函数时,在回调函数中通过不同的ID号来区分不同的定时器
Tim_Report_Sta_cb); //回调函数
}
//返回值,创建成功返回定时器的句柄,由于FreeRTOSCongfig.h文件中heap空间不足,或者定时器周期设置为0,会返回NULL
}

//软件定时开始
void Tim_Report_Sta_Start(void)
{
if (Tim_Report_Sat)
{
xTimerStart (Tim_Report_Sat, 0);// 第1个参数是定时器句柄。第2个参数是成功启动定时器前的最大等待时间设置,单位系统时钟节拍
}
}

//软件定时停止,对于循环调用的功能一般就不需要调用Stop
void Tim_Report_Sta_Stop(void)
{
if (Tim_Report_Sat)
{
xTimerStop(Tim_Report_Sat, 0);// 第1个参数是定时器句柄。第2个参数是成功停止定时器前的最大等待时间设置,单位系统时钟节拍
}
}

//回调函数
static void Tim_Report_Sta_cb(TimerHandle_t xTimer)
{
/*自己想实现的功能*/
}


举报

相关推荐

0 条评论