你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32C5 HAL SPI CRC 错误无法触发错误回调

[复制链接]
patch1582 提问时间:2026-7-9 16:56 / 未解决

我的配置已开启 SPI 硬件 CRC 校验。发生 CRC 校验错误时,传输结束前可以观测到 CRCERR 标志位被置 1;但该 CRC 错误始终不会通过 HAL 错误回调函数上报。 梳理 HAL 底层实现,发现逻辑存在如下问题: 函数SPI_CloseTransfer()会先调用LL_SPI_Disable()关闭 SPI 外设; 关闭外设后,才执行LL_SPI_IsActiveFlag_CRCERR()判断是否存在 CRC 错误。 一旦先执行LL_SPI_Disable()再读取标志,就无法再检测到 CRCERR 错误。 如果把 CRCERR 标志判断逻辑挪到LL_SPI_Disable()之前,就能正常捕获 CRC 错误。 另外在我的场景中,SPI_CloseTransfer()由HAL_SPI_IRQHandler()中断服务函数调用,但存在两处缺陷: 上层代码没有接收、判断SPI_CloseTransfer()的返回值; 仅执行传输完成回调,即便已检测到 CRC 校验失败,也不会进入错误回调。 我的理解: LL_SPI_Disable()本身并不会硬件清零 CRCERR 标志; HAL 状态机的流程存在缺陷:先关闭外设、判定传输完成,之后才校验 CRC 错误,导致校验失败无法向上传递。 麻烦帮忙解答以下几疑问: HAL SPI 驱动内部,检测 CRC 错误的标准执行顺序应该是怎样的? 是否必须在关闭 SPI 外设之前完成 CRC 错误检测与处理? STM32C5 系列的 HAL SPI 驱动是否存在该已知缺陷或功能限制?

收藏 评论0 发布时间:2026-7-9 16:56

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版