[STM32F4] stm32f4xx_hal_rcc_ex.c 移位缺失导致比较错误

[复制链接]
20|3
地瓜patch 发表于 2026-11-4 22:01 | 显示全部楼层 |阅读模式
用STM32F411时,MX生成工程,stm32f4xx_hal_rcc_ex.c 文件第 2693 行:
srcclk = __HAL_RCC_GET_I2S_SOURCE();
该宏通过`READ_BIT`读取 I2SSRC 寄存器位,但没有执行右移 23U 的操作。
随后函数直接将读取出来的值与 0 或 1 做对比。这就出错了。
导致在 HAL 库中,无法将 I2S 配置为外部时钟源。

还有库代码总是把这个寄存器初始化为 PLL 时钟,不管用户配置如何。



OKAKAKO 发表于 2026-11-4 22:17 | 显示全部楼层
大概率是掩码或位宽定义不匹配,PLL比较前应先左移到位段。HAL库各版本实现有差异,对照参考手册核对RCC_CFGR偏移即可。
小夏天的大西瓜 发表于 2026-11-4 22:42 | 显示全部楼层
建议对照官方最新版HAL比对差异,位定义改动常带副作用,用git diff定位后单独打补丁验证。
szt1993 发表于 2026-11-4 23:04 | 显示全部楼层
READ_BIT读出的位仍在原位,不右移就和0/1比较必然出错。建议用_POSITION_VAL定义取值,或改成判断非零,别直接比大小。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

3166

主题

18450

帖子

31

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