星云狂想曲 发表于 2025-7-31 10:19

I2C中断例程里面这个delay()延时是怎么回事?

今天在学习AT32F437系列I2C的参考例程时,看到I2C中断方式通讯的例程里面有下面一个延时操作。有人知道为什么吗?
/* wait for the communication to end */
    if(i2c_wait_end(&hi2cx, I2C_TIMEOUT) != I2C_OK)
    {
      error_handler(i2c_status);
    }

    delay_ms(10);

    /* start the request reception process */
    if((i2c_status = i2c_master_receive_int(&hi2cx, I2Cx_ADDRESS, rx_buf, BUF_SIZE, I2C_TIMEOUT)) != I2C_OK)
    {
      error_handler(i2c_status);
    }上文中的第7行,delay_ms(10)延时处理。

我在单步调试时,看到没有这个延时处理通讯也正常的。

还有人做过类似的测试不??



muyichuan2012 发表于 2025-7-31 18:38

这个案例是第一笔数据发完了,间隔10ms,发下一笔数据。你可以根据自己应用修改。

快乐制造机 发表于 2025-8-1 10:35

这个延时可能是为了确保I2C总线上的信号稳定,防止在连续操作之间产生冲突。即使在单步调试时没有这个延时也能正常通讯,但在实际应用中,特别是在高频率操作时,这个延时可能是必要的。

DreamWanderer 发表于 2025-8-1 15:55

这个延时 是要的,可以根据自己的速率改,没有的话你可以试试,行不通的。

旧时光放映机 发表于 2025-8-3 09:28

这个延时可能是为了确保I2C总线在一次通信结束后稳定下来,防止立即开始下一次通信时发生冲突。即使在单步调试时没有这个延时也能正常通信,但在实际应用中,为了提高系统的稳定性和可靠性,这个延时是有必要的。

暗夜幽灵骑士 发表于 2025-8-3 16:55

这个延时可能是为了确保I2C总线在通信结束后稳定下来,避免立即开始下一次通信时产生冲突。虽然你发现没有这个延时也能正常通信,但加上延时可以提高系统的健壮性。

作业天敌在此 发表于 2025-8-6 08:37

这个延时可能是为了确保I2C总线上的信号稳定,防止因为过快的连续操作导致总线冲突。虽然你单步调试时发现没有这个延时也能正常通讯,但为了系统的稳定性和兼容性,还是建议保留这个延时。
页: [1]
查看完整版本: I2C中断例程里面这个delay()延时是怎么回事?