打印
[AT32F437]

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

[复制链接]
98|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星云狂想曲|  楼主 | 2025-7-31 10:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在学习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 | 只看该作者
这个延时 是要的,可以根据自己的速率改,没有的话你可以试试,行不通的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

0

粉丝