个人中心 - GD32 MCU 开发者社区

wifi
LV.1
个人简介: a
wifi LV.1
2026年7月7日
1 评论
活跃 时间:2026-07-09
37 次浏览
0
0
1
Johnson
时间:2026-07-09

看波形主机发来的所有ADDR、DATA都没有ACK,说明从机处理从ADDSEND位都没有正常置起;

建议不要用中断的方式处理,从机用最简单的polling模式,例如下:

/* wait until ADDSEND bit is set /
while(!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND));
/
clear ADDSEND bit /
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
for(i = 0; i < 16; i++) {
/
wait until the RBNE bit is set */
while(!i2c_flag_get(I2C0, I2C_FLAG_RBNE));

    /* read a data byte from I2C_DATA */
    i2c_receiver[i] = i2c_data_receive(I2C0);
}
/* wait until the STPDET bit is set */
while(!i2c_flag_get(I2C0, I2C_FLAG_STPDET));
/* clear the STPDET bit */
i2c_enable(I2C0);

看看卡在哪一步?

P.S. 从主机下发的地址来看,主机在给slave 0x50发送write和read,但你的初始化

I2C0_SLAVE_ADDRESS7)宏定义为0xA0,似乎这个波形不符合你从机的响应需求。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

暂无内容

相关内容会显示在这里,期待您的分享与发现。

确定删除吗?
删除后无法恢复,请确认后操作!
编辑