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)延时处理。
我在单步调试时,看到没有这个延时处理通讯也正常的。
还有人做过类似的测试不??
这个案例是第一笔数据发完了,间隔10ms,发下一笔数据。你可以根据自己应用修改。 这个延时可能是为了确保I2C总线上的信号稳定,防止在连续操作之间产生冲突。即使在单步调试时没有这个延时也能正常通讯,但在实际应用中,特别是在高频率操作时,这个延时可能是必要的。
这个延时 是要的,可以根据自己的速率改,没有的话你可以试试,行不通的。 这个延时可能是为了确保I2C总线在一次通信结束后稳定下来,防止立即开始下一次通信时发生冲突。即使在单步调试时没有这个延时也能正常通信,但在实际应用中,为了提高系统的稳定性和可靠性,这个延时是有必要的。
这个延时可能是为了确保I2C总线在通信结束后稳定下来,避免立即开始下一次通信时产生冲突。虽然你发现没有这个延时也能正常通信,但加上延时可以提高系统的健壮性。
这个延时可能是为了确保I2C总线上的信号稳定,防止因为过快的连续操作导致总线冲突。虽然你单步调试时发现没有这个延时也能正常通讯,但为了系统的稳定性和兼容性,还是建议保留这个延时。
页:
[1]