繁体   English   中英

I2C不确认从机地址

[英]I2C Does not acknowledge Slave Address

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

}

有人可以帮忙吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM