主要内容

在 STM32 处理器上优化 FreeRTOS 调度

此示例说明如何使用 Embedded Coder® Support Package for STMicroelectronics® STM32 Processors 在 STMicroelectronics NUCLEO-F207ZG 板上执行 Simulink® 模型。它指导您在 STM32CubeMX 工作流中实现 FreeRTOS 调度,从而实现高效的任务管理和代码执行。

FreeRTOS 是为嵌入式设备设计的开源实时操作系统 (RTOS),可实现高效的多任务处理和资源管理。当与 STM32 处理器结合使用时,它为开发复杂的实时应用程序提供框架。

简介

Embedded Coder® Support Package for STMicroelectronics® STM32 能够基于模型指定的速率调度代码执行。它与 FreeRTOS 集成,为线程和时间管理提供标准接口。此 STMicroelectronics® STM32 处理器支持 Digital Port Write 模块,允许它们以不同的基本速率运行。

在此示例中,您将学习如何配置 Simulink 模型以便为 STMicroelectronics NUCLEO-F207ZG 生成代码,并运行生成的代码,以在指定的速率下周期性地打开和关闭 LED。

前提条件

完成以下教程:

必需的硬件

STMicroelectronics NUCLEO-F207ZG

模型

打开 FREERTOS_gettingstarted 预配置模型。此示例说明如何将 FreeRTOS 与 STM32 处理器结合使用,使 LED 以指定的速率闪烁。

1.配置目标模型,使 LED 灯以您在模型中指定的采样率闪烁。

2.双击 GPIO 模块以打开“模块参数”对话框,并确保配置以下引脚编号。

  • 绿色 LED 连接到 GPIOB 端口的引脚 0。

  • 蓝色 LED 连接到 GPIOB 端口的引脚 7。

  • 红色 LED 连接到 GPIOB 端口的引脚 14。

3.在 STM32CubeMX 工程中配置与 GPIO_Output 相同的引脚(PB0、PB7、PB14)以切换用户 LED。有关详细信息,请参阅 FreeRTOS STM32CubeMX 工程配置

配置 Simulink 模型

1.打开 FREERTOS_gettingstarted 模型。

2.CTRL+E 打开“配置参数”对话框。点击左窗格中的硬件实现。将硬件板设置为基于 STM32F2xx

3.硬件板设置下,展开操作系统/调度器并将操作系统设置为 FreeRTOS

4.转至编译选项,并点击浏览以选择 gettingStarted_F2027ZG.ioc STM32CubeMX 工程文件。有关 STM32CubeMX 工程的详细信息,请参阅基于 STMicroelectronics STM32 处理器的板快速入门

5.当您将操作系统设置为 FreeRTOS 时,请考虑以下 Simulink 配置:

  • 使用 FreeRTOS 时,请确保将模型基本速率设置为大于或等于 1 毫秒的值。

  • FreeRTOS 支持最多 56 个线程优先级(即 0 - 55 之间),其中 1 - 40 个线程优先级可用于调度模型速率。41-55 个线程优先级保留用于用户自定义的更高优先级线程。空闲线程优先级保留用于外部模式仿真。

  • 注意:软件计时器用于调度模型速率。计时器任务优先级应设置为高于最高调度速率的优先级(40 是基本速率)。

  • 使用 FreeRTOS 时,您在配置参数 > 代码生成 > 优化 > 高级参数 > 最大堆栈大小列表中指定的值将应用于每个线程。但是,指定的堆栈大小在某些线程中可能未得到充分利用。

注意:线程的堆栈大小在配置参数 > 代码生成 > 优化 > 高级参数 > 最大堆栈大小STM32CubeMX > 中间件 > FREERTOS > 内核设置 > 配置参数 > 最小堆栈大小中设置为最大值

FreeRTOS STM32CubeMX 工程配置

当您选择 FreeRTOS 作为操作系统时,请确保在 STM32CubeMX 工程中配置以下设置。

1.打开 gettingStarted_F2027ZG.ioc 文件。

2.在 STM32CubeMX 工程中将引脚 (PB0) 配置为 GPIO_Output 以切换用户 LED。

3.同样,在 IOC 文件中将其他引脚 PB7 和 PB14 配置为 GPIO_Output

4.STM32CubeMX > 中间件 > FREERTOS > 接口中对接口选择 CMSIS_V2

5.确保分配足够的堆大小,并将计时器任务优先级设置为大于 40

6. STM32CubeMX > 中间件 > FREERTOS > 高级设置 > Newlib 设置中将 USE_NEWLIB_REENTRANT 设置为 Enabled

从 Simulink 模型生成代码并加载到硬件板上

1.要为模型生成代码,请按 Ctrl+B 或点击编译、部署和启动

2.按照编译过程进行操作,方法是使用模型画布底部提供的链接打开诊断查看器。在您将代码加载到板上后,硬件板上的 LED 会闪烁,表示代码正在运行。