[其他ST产品] STM32硬件IIC

[复制链接]
1380|18
 楼主| flycamelaaa 发表于 2024-4-24 22:00 | 显示全部楼层 |阅读模式
使用STM32F103的硬件IIC,查询的方式,进行通讯,出现BUSY之后,去重新初始化IIC之后,之后为什么会每次卡在设备地址发送不出去啊。求教,求教


tpgf 发表于 2024-5-8 08:31 | 显示全部楼层
建议楼主看一下晶振是否已经起振了
tpgf 发表于 2024-5-8 09:35 | 显示全部楼层
为什么出现busy信号要对模块进行重新初始化呢
keaibukelian 发表于 2024-5-8 10:38 | 显示全部楼层
使用示波器看看发送出来的波形是不是符合iic时序的要求
renzheshengui 发表于 2024-5-8 22:51 | 显示全部楼层
看一下总线上的波形 看看是不是因为硬件原因导致不能正常发送波形的
paotangsan 发表于 2024-5-8 23:24 | 显示全部楼层
楼主的意思就是无法将主设备 和从设备进行连接?还是说无法设置设备的地址呢?
guanjiaer 发表于 2024-5-8 23:57 | 显示全部楼层
总线上返回错误码吗 还是说什么信息都没有
纠结的那些年 发表于 2024-8-31 16:11 | 显示全部楼层
每次卡在设备地址发送不出去的问题,通常这是因为I²C总线在重新初始化后仍然处于"忙"的状态
公羊子丹 发表于 2025-4-3 07:36 | 显示全部楼层
STM32F103 的 IIC 硬件有时候会陷入 BUSY 状态,可能是总线被拉低了,试试在重新初始化之前手动释放 SCL 和 SDA?
周半梅 发表于 2025-4-3 07:37 | 显示全部楼层
你可以在重新初始化前加一个 I2C_DeInit(),然后再 I2C_Init(),看看能不能解决卡住的问题。
帛灿灿 发表于 2025-4-3 07:37 | 显示全部楼层
可能是 IIC 设备在上次通讯失败后没有释放总线,建议用 GPIO 模拟时钟线 SCL 拉高 9 次,强制清除 BUSY 状态。
童雨竹 发表于 2025-4-3 07:38 | 显示全部楼层
你检查过 IIC 外设的 SR2 寄存器吗?如果 BUSY 位一直为 1,说明总线可能是挂死了,需要手动复位 IIC 外设。
万图 发表于 2025-4-3 07:39 | 显示全部楼层
试试 __HAL_I2C_DISABLE() 之后再 __HAL_I2C_ENABLE(),有时候直接重新初始化 IIC 可能不会清掉 BUSY 状态。
Wordsworth 发表于 2025-4-3 07:40 | 显示全部楼层
你的 IIC 设备上电顺序有没有问题?有些 IIC 设备上电慢,STM32 可能在设备还没准备好时就开始通讯,导致总线异常。
Bblythe 发表于 2025-4-3 07:41 | 显示全部楼层
你可以尝试在初始化前加个 HAL_Delay(10),有些 IIC 设备需要一点时间才能稳定,太快初始化可能会导致错误。
Pulitzer 发表于 2025-4-3 07:42 | 显示全部楼层
如果你是用 HAL 库,试试 HAL_I2C_DeInit() 之后再 HAL_I2C_Init(),有时候 HAL 库初始化不彻底,需要先彻底释放。
Uriah 发表于 2025-4-3 07:43 | 显示全部楼层
你检查过 IIC 相关的 GPIO 复用模式了吗?可能是某次异常后 GPIO 配置出错,导致 IIC 无法正常工作。
Clyde011 发表于 2025-4-3 07:44 | 显示全部楼层
最后一个杀手锏,你可以试试 NVIC_SystemReset(); 直接软复位 STM32,看是不是能恢复 IIC 通讯
您需要登录后才可以回帖 登录 | 注册

本版积分规则

837

主题

4442

帖子

1

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