[其他ST产品] 能否将 HAL库和 LL 库与 FreeRTOS 一起使用

[复制链接]
 楼主| lilaiju 发表于 2025-5-21 11:00 | 显示全部楼层 |阅读模式
使用 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代码。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

34

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部