文章目录
前言
定时器可以说是每个MCU都有的外设,除了有最基础的定时的功能,还有些很强大的功能–PWM,输出捕获等功能。MCU自带的定时器属于硬件定时器,不同MCU的硬件定时器数量不同。freeRTOS提供了软件定时器,软件定时器精度没有硬件定时器的精度高。但是对于普通的精度要求的周期性处理的任务来说足够了。
当MCU的硬件定时器不够的时候就可以考虑freeRTOS 的软件定时器。
一、软件定时器介绍
软件定时器可以定时一段时间,当定时的时间到达之后就执行指定的功能函数,被定时器调用的这个功能叫做回调函数。回调函数的两次执行间隔就是定时器的定时周期,简单地说,当定时器的定时时间到了以后就会执行回调函数。
关于回调函数的注意事项:
软件定时器的回调函数在定时器服务中执行,所以一定不能在回调函数中调用任何会阻塞任务的API!!!比如,定时器回调函数中绝对不要用 vTaskDelay(),vTaskDelayUntil(),以及一些访问队列或者信号量的非零阻塞时间的API!!
二、定时器服务/Daemon 任务
1. 定时器服务任务 与 队列
2. 定时器相关配置
定时器服务任务 与 定时器命令队列
3. 单次定时器 与 周期定时器
4. 复位软件定时器
有时候定时器正在运行的时候需要复位软件定时器,复位软件定时器会重新计算走起到达的时间点,这个新的时间点是相对于杜威定时器的那个时刻计算的,并不是第一次启动软件定时器的那个时间点。
5. 创建软件定时器
6. 开启软件定时器
中断版本的传参和之前的一样!!!
7. 停止软件定时器
参数与之前的参数一致!!
8. 实验
#include "sys.h"
#include "usart.h"
#include "led.h"
#include