STM32硬件IIC
使用STM32F103的硬件IIC,查询的方式,进行通讯,出现BUSY之后,去重新初始化IIC之后,之后为什么会每次卡在设备地址发送不出去啊。求教,求教
建议楼主看一下晶振是否已经起振了 为什么出现busy信号要对模块进行重新初始化呢 使用示波器看看发送出来的波形是不是符合iic时序的要求 看一下总线上的波形 看看是不是因为硬件原因导致不能正常发送波形的
楼主的意思就是无法将主设备 和从设备进行连接?还是说无法设置设备的地址呢? 总线上返回错误码吗 还是说什么信息都没有 每次卡在设备地址发送不出去的问题,通常这是因为I²C总线在重新初始化后仍然处于"忙"的状态 STM32F103 的 IIC 硬件有时候会陷入 BUSY 状态,可能是总线被拉低了,试试在重新初始化之前手动释放 SCL 和 SDA? 你可以在重新初始化前加一个 I2C_DeInit(),然后再 I2C_Init(),看看能不能解决卡住的问题。 可能是 IIC 设备在上次通讯失败后没有释放总线,建议用 GPIO 模拟时钟线 SCL 拉高 9 次,强制清除 BUSY 状态。 你检查过 IIC 外设的 SR2 寄存器吗?如果 BUSY 位一直为 1,说明总线可能是挂死了,需要手动复位 IIC 外设。 试试 __HAL_I2C_DISABLE() 之后再 __HAL_I2C_ENABLE(),有时候直接重新初始化 IIC 可能不会清掉 BUSY 状态。 你的 IIC 设备上电顺序有没有问题?有些 IIC 设备上电慢,STM32 可能在设备还没准备好时就开始通讯,导致总线异常。 你可以尝试在初始化前加个 HAL_Delay(10),有些 IIC 设备需要一点时间才能稳定,太快初始化可能会导致错误。 如果你是用 HAL 库,试试 HAL_I2C_DeInit() 之后再 HAL_I2C_Init(),有时候 HAL 库初始化不彻底,需要先彻底释放。 你检查过 IIC 相关的 GPIO 复用模式了吗?可能是某次异常后 GPIO 配置出错,导致 IIC 无法正常工作。 最后一个杀手锏,你可以试试 NVIC_SystemReset(); 直接软复位 STM32,看是不是能恢复 IIC 通讯
页:
[1]