lilaiju 发表于 2025-5-21 11:00

能否将 HAL库和 LL 库与 FreeRTOS 一起使用

使用 STM32CubeIDE 时遇到了问题。使用 FreeRTOS 生成项目,用 了 LL 代码,
但是当我为 TIMx 设置时基源时,会生成一堆 HAL 代码。
编译不通过,咋办?

laocuo1142 发表于 2025-5-21 15:45

检查 CubeMX 配置中的代码生成选项是否强制使用了 HAL。

flycamelaaa 发表于 2025-5-21 15:46

强制使用 LL 库替代 HAL,检查 "MCU Settings" 中是否启用了 LL 库(如 USE_FULL_LL_DRIVER)。在 main.c 的 /* USER CODE BEGIN Includes */ 部分手动添加 LL 头文件。

flycamelaaa 发表于 2025-5-21 18:00

手动替换生成的 HAL 代码为 LL。

stormwind123 发表于 2025-5-21 20:00

清理并重建项目。

公羊子丹 发表于 2025-5-22 07:35

HAL 和 LL 混用是可以的,但得注意不要在同一个外设上混用,不然容易出问题。

周半梅 发表于 2025-5-22 07:36

STM32CubeMX 默认配置定时器的时候一般都会生成 HAL 代码,你可以手动删掉或者改成 LL 初始化。

帛灿灿 发表于 2025-5-22 07:37

如果只是定时器有问题,建议把 CubeMX 的 TIM 配置为 “Do Not Generate Initialization Code”,然后自己写 LL 初始化代码。

童雨竹 发表于 2025-5-22 07:37

我也遇到过类似情况,最后是只用 LL 初始化,FreeRTOS 配合用 systick,避免和 HAL 冲突。

万图 发表于 2025-5-22 07:38

HAL 默认会初始化 systick,如果你用 LL 写了定时器,FreeRTOS 的时间基准也要手动指定一下。

Wordsworth 发表于 2025-5-22 07:39

可以考虑只用 HAL 做系统初始化,具体业务逻辑用 LL 写,这样比较清晰,编译也不会冲突。

Bblythe 发表于 2025-5-22 07:39

我是直接禁用 HAL 的中断处理函数,统一改成 LL 的方式来处理,省心多了。

Pulitzer 发表于 2025-5-22 07:41

如果只是想测试,直接用CubeMX生成+板子连SD卡模块,基本能跑通基本的f_open/f_read。

Uriah 发表于 2025-5-22 07:42

你试试在 .ioc 文件中关闭 TIM 的自动配置,然后只保留 FreeRTOS 和其他必要模块,应该会干净很多。

Clyde011 发表于 2025-5-22 07:43

混用没问题,关键是要掌握生成代码的位置和方式,有时候自己写比自动生成还省事儿。

gaonaiweng 发表于 2025-5-31 18:23

使用STM32CubeIDE时,最好先生成无外设初始化的FreeRTOS框架,再加你的LL代码。
页: [1]
查看完整版本: 能否将 HAL库和 LL 库与 FreeRTOS 一起使用