FreeRTOS STM32集成

时间:2018-02-04 20:56:55

标签: stm32 freertos

我试图在现有的STM32固件项目中启动FreeRTOS。我复制了所有文件,纠正了中断的优先级。但是,处理器卡在xTaskIncrementTick for循环中,它无法退出该循环。与此同时,所有其他计时器中断停止工作。

我正在使用HAL库。 HAL计时器使用TIM1而不是SysTick,因此FreeRTOS可以使用它。

4 个答案:

答案 0 :(得分:1)

我无法在xTaskIncrementTick()中看到循环 - 请参阅此链接上的第2589行:https://sourceforge.net/p/freertos/code/HEAD/tree/tags/V10.0.1/FreeRTOS/Source/tasks.c您遇到了哪一行?

为什么需要使用TIM1而不是默认的SysTick?除非你想要一个超低功耗的应用程序,否则这将是非常不寻常的,在这种情况下你可能会选择使用低功耗时钟 - 但我不认为TIM1是低功耗。

我认为STM32Cube软件也使用SysTick。处理第三方库的常规方法是除了RTOS之外还希望使用SysTick是让FreeRTOS管理tick中断,并使用FreeRTOS勾选钩子(https://www.freertos.org/a00016.html)来调用库的勾选处理程序。虽然我认为STM32Cube软件是相反的 - 它安装了自己的tick处理程序并从中调用FreeRTOS tick tick。

答案 1 :(得分:1)

目前将 FreeRTOS 包含到您的项目中的最佳方法是使用 Stm32CubeIDE 中包含的 de project 配置,您可以在中间件部分激活它。

我强烈推荐观看有关 FreeRTOS 的最新官方 stm32 视频 这是实验室格式的所有视频的a link,其中包含许多有趣的细节。

答案 2 :(得分:0)

根据我的经验,将现有代码移植到基于FreeRTOS的新项目要比在现有项目中安装FreeRTOS要快得多。你必须这样做吗?

我自己的方法是使用包含FreeRTOS的CubeMX创建一个新项目,并设置为支持您现有的代码,然后在我为该新项目生成代码后,我将粘贴现有代码将其作为默认任务。这通常给我一个稳定的起点。

答案 3 :(得分:0)

您可以在ST Microelectronics的官方页面上下载所用电路板的示例。下载后,您将拥有使用外围设备以及与FreeRTOS和其他资源集成的不同示例。我正在使用STM32F746G Disco,STM32F7设备的链接是这样的:

STM32F7 examples