flycamelaaa 发表于 2024-4-24 22:00

STM32硬件IIC


使用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 通讯
页: [1]
查看完整版本: STM32硬件IIC