簡體   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