feat[STM32][USART]: add uart error callback support#11328
feat[STM32][USART]: add uart error callback support#11328wdfk-prog wants to merge 1 commit intoRT-Thread:masterfrom
Conversation
add a control command to register a per-device uart error callback invoke the callback from the HAL uart error hook and clear it before close return -RT_ENOSYS when dma mode is requested without dma support propagate the set-int fallback result in optmode setup to keep control return values explicit
|
👋 感谢您对 RT-Thread 的贡献!Thank you for your contribution to RT-Thread! 为确保代码符合 RT-Thread 的编码规范,请在你的仓库中执行以下步骤运行代码格式化工作流(如果格式化CI运行失败)。 🛠 操作步骤 | Steps
完成后,提交将自动更新至 如有问题欢迎联系我们,再次感谢您的贡献!💐 |
📌 Code Review Assignment🏷️ Tag: bsp_stm32Reviewers: @Liang1795 @hamburger-os @wdfk-prog Changed Files (Click to expand)
📊 Current Review Status (Last Updated: 2026-04-14 15:40 CST)
📝 Review Instructions
|
拉取/合并请求描述:(PR description)
[
为什么提交这份PR (why to submit this PR)
STM32 USART V2 驱动当前缺少设备级错误回调注册与上报能力,上层很难在 HAL UART 错误回调触发时感知具体错误并执行恢复逻辑。同时,
RT_DEVICE_CTRL_CONFIG在非 DMA 构建下请求 DMA 模式时没有显式返回不支持错误码,非 DMA 分支回退到RT_DEVICE_CTRL_SET_INT时也没有向上传递返回值,导致控制路径语义不够明确。你的解决方案是什么 (what is your solution)
本 PR 为 STM32 USART V2 驱动新增
UART_CTRL_SET_ERROR_CALLBACK控制命令,并在struct stm32_uart中增加error_indicate回调指针,用于注册设备级 UART 错误回调。在
HAL_UART_ErrorCallback()中,当回调已注册时调用上层错误通知接口,并在设备关闭路径中先将回调清空再执行HAL_UART_DeInit(),避免关闭过程中继续使用旧回调。同时补充控制路径返回值处理:当未启用 DMA 支持却请求 DMA 模式时显式返回
-RT_ENOSYS;非 DMA 分支回退到RT_DEVICE_CTRL_SET_INT时直接返回其处理结果。请提供验证的bsp和config (provide the config and bsp)
BSP:
.config:
action:
]
当前拉取/合并请求的状态 Intent for your PR
必须选择一项 Choose one (Mandatory):
代码质量 Code Quality:
我在这个拉取/合并请求中已经考虑了 As part of this pull request, I've considered the following:
#if 0代码,不包含已经被注释了的代码 All redundant code is removed and cleaned up