GD32硬件I2C调试记录及技巧分享

在测试GD32F450的硬件I2C时,碰到了I2C_FLAG_ADDSEND标志会自动清零的情况,导致一直开在while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));语句等待I2C_FLAG_ADDSEND标志位置位。

数据手册关于主机模式I2C_FLAG_ADDSEND相关内容描述如下,只在读取I2C_STAT0和I2C_STAT1时会自动清除该标志

查询相关资料,也发现大家有存在类似问题:
https://www.amobbs.com/thread-5564156-1-1.html

最终经过反复测试,确定,I2C的I2C_FLAG_ADDSEND在单步调试时,会被提前自动清零(也可能是jlink调试的时序问题),导致执行while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));时,I2C_FLAG_ADDSEND已经被自动清零了,则卡死。

将断点打在while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));语句之后,则无该问题。

物联沃分享整理
物联沃-IOTWORD物联网 » GD32硬件I2C调试记录及技巧分享

发表评论