我在 Nucleo 144 板上使用 STM32F767ZI MCU,C++ 作为编程语言和 IAR 嵌入式工作台 IDE。即使 I2C 已启用且 TXDR 寄存器中没有数据,TXIS 位标志状态也永远不会设置 (1)。
我还注意到,虽然主机和从机在相关寄存器中具有相同的从机地址,但没有出现 ADDCODE。尽管从代码中可以明显看出我正在使用轮询方法。ADDCODE 寄存器应该与从地址具有相同的地址,这也不会发生。
硬件设置已被验证为正确。
尝试使用 I2C1 作为主发送器和 I2C2 作为从接收器在同一 MCU 上执行环回测试。代码卡在如下部分:
while(!(IsTXISset())) // Code is getting stuck here
{
}
如下IsTXISset()
:
bool I2CInterface_c::IsTXISset(void) const
{
bool flag{false};
volatile uint32_t isrreg = I2C_ISR.Get();
isrreg &= TXISFLAG; //TXISFLAG = 0x02 i.e the only bit position of the TXIS is set as high
if(isrreg == TXISFLAG)
{
flag = true;
}
return flag;
}
有人可以帮忙吗?