能否将 HAL库和 LL 库与 FreeRTOS 一起使用
使用 STM32CubeIDE 时遇到了问题。使用 FreeRTOS 生成项目,用 了 LL 代码,但是当我为 TIMx 设置时基源时,会生成一堆 HAL 代码。
编译不通过,咋办?
检查 CubeMX 配置中的代码生成选项是否强制使用了 HAL。 强制使用 LL 库替代 HAL,检查 "MCU Settings" 中是否启用了 LL 库(如 USE_FULL_LL_DRIVER)。在 main.c 的 /* USER CODE BEGIN Includes */ 部分手动添加 LL 头文件。 手动替换生成的 HAL 代码为 LL。 清理并重建项目。 HAL 和 LL 混用是可以的,但得注意不要在同一个外设上混用,不然容易出问题。 STM32CubeMX 默认配置定时器的时候一般都会生成 HAL 代码,你可以手动删掉或者改成 LL 初始化。 如果只是定时器有问题,建议把 CubeMX 的 TIM 配置为 “Do Not Generate Initialization Code”,然后自己写 LL 初始化代码。 我也遇到过类似情况,最后是只用 LL 初始化,FreeRTOS 配合用 systick,避免和 HAL 冲突。 HAL 默认会初始化 systick,如果你用 LL 写了定时器,FreeRTOS 的时间基准也要手动指定一下。 可以考虑只用 HAL 做系统初始化,具体业务逻辑用 LL 写,这样比较清晰,编译也不会冲突。 我是直接禁用 HAL 的中断处理函数,统一改成 LL 的方式来处理,省心多了。 如果只是想测试,直接用CubeMX生成+板子连SD卡模块,基本能跑通基本的f_open/f_read。 你试试在 .ioc 文件中关闭 TIM 的自动配置,然后只保留 FreeRTOS 和其他必要模块,应该会干净很多。 混用没问题,关键是要掌握生成代码的位置和方式,有时候自己写比自动生成还省事儿。 使用STM32CubeIDE时,最好先生成无外设初始化的FreeRTOS框架,再加你的LL代码。
页:
[1]