1、任务概述
使用freertos多任务系统实现正点原子STM32F103ZET6开发板的流水灯点亮控制。
2、cubemx设置
(1)SYS设置,注意选择定时器源为TIM1-TIM8的任一个,因为滴答定时器被多任务系统占用不能选择
(2)时钟选择
(3)freertos配置
添加两个任务:02和03
(4)GPIO设置:两个LED灯引脚为输出
(5)时钟频率设置
最后生成工程代码。
3、程序代码添加:在freertos.c中创建的两个任务重添加for循环中的灯的亮灭控制代码
/* USER CODE END Header_StartTask02 */
void StartTask02(void const * argument)
{
/* USER CODE BEGIN StartTask02 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5, GPIO_PIN_RESET);
osDelay(500);//时基1ms
HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5, GPIO_PIN_SET);
osDelay(500);//时基1ms
}
/* USER CODE END StartTask02 */
}
/* USER CODE BEGIN Header_StartTask03 */
/**
* @brief Function implementing the myTask03 thread.
* @param argument: Not used
* @retval None
*/
/* USER CODE END Header_StartTask03 */
void StartTask03(void const * argument)
{
/* USER CODE BEGIN StartTask03 */
/* Infinite loop */
for(;;)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, GPIO_PIN_SET);
osDelay(500);//时基1ms
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_5, GPIO_PIN_RESET);
osDelay(500);//时基1ms
}
/* USER CODE END StartTask03 */
}
最后编译下载程序,可以看到开发板上的两个灯同时交替闪烁。