目录
一、简介
1.1、开发环境
STM32CubeIDE V1.9,FreeRTOS CMSIS_V1。
1.2、摘要
FreeRTOS软件定时器的创建、复位、开始和停止API,编程时复制使用,高效统一。
二、STM32CubeIDE配置
如图,使能“USE_TIMERS”。使能后,新增选择根据自己所需进行配置。
TIMER_TASK_PRIORITY:设置软件定时器服务任务的任务优先级;
TIMER_QUEUE_LENGTH:设置软件定时器命令队列的队列长度;
TIMER_TASK_STACK_DEPTH:设置定时器服务任务的任务堆栈大小,单位字。对STM32而言,一个字是4字节。
三、创建定时器
3.1、头文件声明
在头文件(.h)中,加入以下语句:
extern TimerHandle_t EXAMPLE_TIMER_HANDLE; //定时器句柄
#define EXAMPLE_TIMER_NAME "EXAMPLE_TIMER" //定时器名称
#define EXAMPLE_TIMER_TICK 500 //定时器周期
#define EXAMPLE_TIMER_TYPE pdTRUE //定时器类型
#define EXAMPLE_TIMER_ID 1 //定时器ID号
void Example_TimerCallback(TimerHandle_t); //定时器回调函数
定时器类型:pdTRUE为周期定时器;pdFALSE为单次定时器。
3.2、工程文件定义
在工程文件(.c)加入以下定义语句:
TimerHandle_t EXAMPLE_TIMER_HANDLE; //定时器句柄
3.3、创建定时器
在初始化函数中加入以下语句,用于创建定时器:
EXAMPLE_TIMER_HANDLE = xTimerCreate( //创建定时器
(char * ) EXAMPLE_TIMER_NAME, //定时器名称
(TickType_t ) EXAMPLE_TIMER_TICK, //定时器周期
(UBaseType_t ) EXAMPLE_TIMER_TYPE, //定时器类型
(void * ) EXAMPLE_TIMER_ID, //定时器ID
(TimerCallbackFunction_t) Example_TimerCallback ); //定时器回调函数
3.4、开启、复位、和关闭定时器
在需要开启定时器的位置,加入以下语句:
xTimerStart(EXAMPLE_TIMER_HANDLE,0); //开启定时器
在需要复位定时器的位置,加入以下语句:
xTimerReset(EXAMPLE_TIMER_HANDLE,0); //复位定时器
在需要关闭定时器的位置,加入以下语句:
xTimerStop(EXAMPLE_TIMER_HANDLE,0); //关闭定时器
以上语句只能适用于任务中,若要用于中断中,需在函数名后面加“FromISR”,具体如下:
xTimerStartFromISR(EXAMPLE_TIMER_HANDLE,0); //开启定时器
xTimerResetFromISR(EXAMPLE_TIMER_HANDLE,0); //复位定时器
xTimerStopFromISR(EXAMPLE_TIMER_HANDLE,0); //关闭定时器
四、定时器回调函数
定时器计时完成后,会调用对应的回调函数。由于软件定时器的回调函数是在定时器服务任务中执行的,所以不能在回调函数中调用任何会阻塞任务的API函数。
void Example_TimerCallback(TimerHandle_t xTimer) //定时器回调函数
{
if(xTimer == EXAMPLE_TIMER_HANDLE) //判定:定时器句柄
{
//此处填写执行语句
}
}