feat(stm32): Add hard I2C mode selection and I2C4 support#11255
feat(stm32): Add hard I2C mode selection and I2C4 support#11255wdfk-prog wants to merge 2 commits intoRT-Thread:masterfrom
Conversation
|
👋 感谢您对 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-03-16 10:33 CST)
📝 Review Instructions
|
为什么提交这份PR (why to submit this PR)
当前 STM32 硬件 I2C 驱动对传输模式的支持不够清晰,发送和接收路径主要依赖固定的 IT / DMA 逻辑,缺少对 POLL、INT、DMA 的统一区分与按配置选择;同时现有实现对 I2C4 的支持不完整,初始化、DMA/IRQ 处理、传输流程和错误恢复路径也存在可维护性不足的问题。
因此提交本 PR,用于完善 STM32 硬件 I2C 驱动的模式选择机制,并补齐 I2C4 支持,提升代码可配置性、可扩展性和稳定性。
你的解决方案是什么 (what is your solution)
本 PR 主要完成了以下改动:
统一硬件 I2C 能力宏定义
BSP_HARDWARE_I2C、BSP_I2C_USING_POLL、BSP_I2C_USING_INT、BSP_I2C_USING_DMA、BSP_I2C_USING_IRQ等聚合宏;增加 I2C4 支持
i2c_index_t、i2c_config[]、DMA/IRQ 中断处理与初始化逻辑;BSP_USING_HARD_I2C4场景能够进入完整的总线注册和收发流程。重构主传输流程
stm32_i2c_master_receive_start()和stm32_i2c_master_transmit_start();优化顺序传输与模式判断
stm32_i2c_get_xfer_mode()统一计算 HAL 顺序传输模式;RT_I2C_NO_START/RT_I2C_NO_STOP的组合逻辑;stm32_i2c_mode_name()便于日志分析。完善初始化和错误处理
兼容更多 STM32 系列初始化细节
请提供验证的bsp和config (provide the config and bsp)
BSP:
.config:
BSP_USING_HARD_I2C1BSP_I2C1_TX_USING_POLLBSP_I2C1_RX_USING_POLLBSP_I2C1_TX_USING_INTBSP_I2C1_RX_USING_INTBSP_I2C1_TX_USING_DMABSP_I2C1_RX_USING_DMABSP_USING_HARD_I2C4及相关配置