使用STM32CudeMX配置FreeRTOS

本文最后更新于 2024年9月6日 下午

开发板NUCLEO-STM32H723ZG

开发环境Ubuntu+Clion+Cmake

安装中间件

首先配置基本的外设,配置过程与正常相同

在配置好基本的外设和引脚之后,点击“Middleweare and software pack”

我已经安装国freeRTOS了,直接点击freeRTOS,然后是用CMSIS_v2接口,这是ARM内核提供的接口

然后生成代码,我这里勾选生成为Cmkae工程,还勾选了生成单独的.c和.h文件

然后点击生成代码

修改Timeabase source SysTick

提示了一个警告,是需要下载STM32H7的软件包,直接下载即可

接着又是一个警告,意思是强烈建议使用“HAL timebase source 不要使用 Systick

我将SYS的Timeabase source SysTick 改成了 TIM1

创建第一个freeRTOS任务

验证工程是否可以正常编译

生成完代码后使用先编译一次,没有报错,只有一个警告不管他。

在主函数中添加代码

添加任务句柄

打开main.c,首先要在如框1所示位置添加任务句柄

1
2
TaskHandle_t LED1_TaskHandle;
TaskHandle_t LED2_TaskHandle;

添加两个任务

在图框框2的位置添加两个任务函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// LED1 任务函数
void LED1_Task(void *pvParameters) {
for (;;) {
HAL_GPIO_TogglePin(LED_GREEN_GPIO_Port, LED_GREEN_Pin); // 切换LED1状态
vTaskDelay(pdMS_TO_TICKS(500)); // 延时500毫秒
}
}

// LED2 任务函数
void LED2_Task(void *pvParameters) {
for (;;) {
HAL_GPIO_TogglePin(LED_YELLOW_GPIO_Port, LED_YELLOW_Pin); // 切换LED2状态
vTaskDelay(pdMS_TO_TICKS(1000)); // 延时1000毫秒
}
}

在主函数中调用两个任务

在框框1所展示的区域内添加两个任务

1
2
3
4
5
6
// 创建LED1任务
xTaskCreate(LED1_Task, "LED1 Task", 128, NULL, 1, &LED1_TaskHandle);

// 创建LED2任务
xTaskCreate(LED2_Task, "LED2 Task", 128, NULL, 1, &LED2_TaskHandle);

这里要解释一下黄色区域的内容
这里都是关于任务调度的内容,所有的任务都需要在这三个函数前创建,并且当使用freeRTOS之后程序永远不会执行到红色横线那里。

烧录程序进行验证

烧录程序到开发板上,可以看到两个LED按照不同的频率交替闪烁


使用STM32CudeMX配置FreeRTOS
http://shishengmi.com/2024/06/12/2024/06/使用STM32CudeMX配置FreeRTOS/
作者
shishengmi
发布于
2024年6月12日
许可协议