声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结
环境 keil , stm32f103
软件定时器简介,
1, 软件定时器允许设置一段时间, 当设置的时间到达之后就执行指定的功能函数, 被定时器调用的这个函数叫做定时器的回调函数。 回调函数两次执行间隔叫做定时器的定时周期, 简而言之, 当定时器的定时周期到了以后就会执行回调函数。
需要开启的宏定义:
1, configUSE_TIMERS
要使用软件定时器的话就要设置 此宏定义为1, 当设置为1的话定时器服务任务就会启动FreeRTOS调度器的时候自动创建。
2, configTIMER_TASK_PRIORITY
设置软件定时器任务的优先级, 可以为0~(configMAX_PRIORITIES-1).
3, configTIMER_QUEUE_LENGTH
此宏用来设置定时器命令队列长度。
4, configTIMER_TASK_STACK_DEPTH
此宏用来设置定时器服务任务的任务堆栈大小, 单位为字, 不是字节!。 对于STM32来说, 一字是4字节。
一些API函数。
1. 复位软件定时器
xTimerReset() // 复位软件定时器, 用在任务中
xTimerResetFromISR() // 复位软件定时器, 用在中断服务函数中。
** 2. 创建软件定时**
xTimerCreate() // 使用动态创建软件定时器
xTimerCreateStatic() // 使用静态方法创建软件定时器。
具体参数 请参考 <<STM32F103 FreeRTOS开发手册V1.1>> 手册
示例
TimerHandle_t OneShotTimer_Handle; // 定时器句柄
OneShotTimer_Handle=xTimerCreate((const char* )"OneShotTimer",
(TickType_t )2000,
(UBaseType_t )pdFALSE,
(void* )2,
(TimerCallbackFunction_t)OneShotCallback); // 创建定时器, 周期2S (2000个时钟节拍), 单次模式
3. 开启软件定时器
xTimerStart() // 开启软件定时器, 用于任务中
xTimerStartFromISR // 开启软件定时器, 用于中断中
4. 停止软件定时器
xTimerStop() // 停止软件定时器, 用于任务中。
xTimerStopFromISR() // 停止软件定时器, 用于中断服务函数中。