0

我在 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;  

}

有人可以帮忙吗?

4

1 回答 1

0

最后,在注意到 GPIO 引脚在替代功能开漏模式下未正确设置后,设法解决了该问题。从机开始确认地址匹配后发现的第二个问题没有发生数据传输,通过编写程序清除 I2C 的 ISR 位的 ADDR 位得到解决。

于 2018-09-12T15:52:39.290 回答