Skip to content

在FreeRTOS中,软件定时器是一种用于在特定时间间隔后触发用户定义的回调函数的机制。软件定时器可以分为单次模式和周期模式。单次模式的定时器在触发一次回调函数后即停止,而周期模式的定时器会在设定的时间间隔内反复触发回调函数。

使用软件定时器的意义其实很简单,方便好用,比硬件定时器用起来方便,而且可以创建很多个。

1. 工程创建

这次我们直接复制工程模板,我们来改,因为就添加一个timer,加的内容不多。这里不在赘述,详细的详见仓库的Timer工程.

2. 代码修改

首先创建一个定时器句柄.

c
osTimerId_t myTimer01Handle;
const osTimerAttr_t myTimer01_attributes = {
  .name = "myTimer01"
};

然后在 MX_FREERTOS_Init()中,我们看到osTimerNew创建了一个软件定时器,Callback01是回调函数,osTimerPeriodic是循环的定时器,一直运行。

osTimerStart()开启定时器, 定时500个tick, 即500ms. 在Callback01回调函数中,定时用串口打印数据.

c
myTimer01Handle = osTimerNew(Callback01, osTimerPeriodic, NULL, &myTimer01_attributes);
osTimerStart(myTimer01Handle, 500);

然后我们烧录测试, 然后连接上串口, 可以看到以下结果:定时500ms,会发送一次数据。

3. 课后作业

完成教学的内容.