队列主要完成任务与任务、任务与中断之间的消息传递。
本文使用的软件为STM32CubeMX5.3.0 、Keil5.25, 硬件平台为Nucleo-L476
STM32CubeMX的工程创建和最基本配置本文不再赘述,
详见:Nucleo-L476运行FreeRTOS学习1-环境搭建Demo: https://blog.csdn.net/Paul_Yu_Zhang/article/details/104233028
只进行有关软件定时器部分的描述。
软定时器不是 FreeRTOS 内核的组成部分,它本质上是一种任务,周期性地调用其回调函数。 本文例子使用
STM32CubeMX 配置创建一个软定时器, 软定时器在回调函数控制 LED 的状态。
开启软件定时器
软件定时器创建
点击add
函数改为Timer01Callback,类型为周期定时器
创建完成后生成工程代码。
代码修改
程序中软件定时器生成代码为:
加入开启定时器代码:
/* USER CODE BEGIN RTOS_TIMERS */
/* start timers, add new ones, ... */
osTimerStart(myTimer01Handle,500);
/* USER CODE END RTOS_TIMERS */
回调函数写如下:
/* Timer01Callback function */
void Timer01Callback(void const * argument)
{
/* USER CODE BEGIN Timer01Callback */
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);//翻转LED电平
/* USER CODE END Timer01Callback */
}
编译之后下载看运行效果。
可以看到500ms切换一下状态。