FreeRTOS STM32集成

FreeRTOS STM32集成,stm32,freertos,Stm32,Freertos,我正试图在现有的STM32固件项目中启动FreeRTOS。我复制了所有文件,修正了中断优先权。然而,处理器被卡在xTaskIncrementTick for循环中,无法跳出该循环。同时,所有其他计时器都停止工作 我在用哈尔图书馆。HAL定时器使用TIM1而不是SysTick,因此FreeRTOS可以使用它。我在xTaskIncrementTick()中看不到循环-请参阅此链接的第2589行:您卡在哪一行 为什么需要使用TIM1而不是默认的SysTick?这将是非常不寻常的,除非你想要一个超低功耗

我正试图在现有的STM32固件项目中启动FreeRTOS。我复制了所有文件,修正了中断优先权。然而,处理器被卡在xTaskIncrementTick for循环中,无法跳出该循环。同时,所有其他计时器都停止工作


我在用哈尔图书馆。HAL定时器使用TIM1而不是SysTick,因此FreeRTOS可以使用它。

我在xTaskIncrementTick()中看不到循环-请参阅此链接的第2589行:您卡在哪一行

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


我认为STM32Cube软件也使用SysTick。处理除RTOS之外还希望使用SysTick的第三方库的正常方法是让FreeRTOS管理tick中断,并使用FreeRTOS tick hook()调用库的tick处理程序。尽管我认为STM32Cube软件的做法正好相反,它安装了自己的tick处理程序并从中调用FreeRTOS tick中断。

以我的经验,将现有代码移植到新的基于FreeRTOS的项目要比在现有项目中安装FreeRTOS快得多。你这样做有什么特别的原因吗


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

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


看看第2624行。我的固件无法跳出这个循环。事实上,如果您选择使用FreeRTOS,STM32Cube会为HAL使用额外的计时器-那么SysTick仅由FreeRTOS使用。这是ST的建议。我个人认为这是在浪费资源。那么,您的意思是将HAL_IncTIck()添加到回调函数中?我可以添加它,但我仍然会在上面提到的循环中。根据您的建议更新代码。现在从vApplicationTickHook()调用HAL_IncTick()。在我调用任何与RTOS相关的东西之前,它都可以正常工作,比如xTaskCreate。然后SysTick中断停止工作,MCU在HardFault_处理程序中结束。但在这种情况下,SysTick或您得到HardFault异常是否真的有问题?很难说。添加vApplicationTickHook后,我遇到了一个硬故障问题。