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

[复制链接]
 楼主| 星云狂想曲 发表于 2025-7-31 10:19 | 显示全部楼层 |阅读模式
今天在学习AT32F437系列I2C的参考例程时,看到I2C中断方式通讯的例程里面有下面一个延时操作。有人知道为什么吗?
  1. /* wait for the communication to end */
  2.     if(i2c_wait_end(&hi2cx, I2C_TIMEOUT) != I2C_OK)
  3.     {
  4.       error_handler(i2c_status);
  5.     }

  6.     delay_ms(10);

  7.     /* start the request reception process */
  8.     if((i2c_status = i2c_master_receive_int(&hi2cx, I2Cx_ADDRESS, rx_buf, BUF_SIZE, I2C_TIMEOUT)) != I2C_OK)
  9.     {
  10.       error_handler(i2c_status);
  11.     }
上文中的第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总线上的信号稳定,防止因为过快的连续操作导致总线冲突。虽然你单步调试时发现没有这个延时也能正常通讯,但为了系统的稳定性和兼容性,还是建议保留这个延时。
VelvetVoyag 发表于 2025-8-11 13:40 | 显示全部楼层
不能连着一起发,会不好识别开始 结束,需要的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

29

帖子

0

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

3

主题

29

帖子

0

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