I2C не подтверждает адрес ведомого - PullRequest
0 голосов
/ 03 сентября 2018

Я использую STM32F767ZI MCU на плате Nucleo 144, C ++ в качестве языка программирования и встроенную среду разработки IAR. Битовый флаг TXIS Состояние никогда не получает Set (1), даже когда I2C включен и нет данных в регистре TXDR.

То, что я также заметил, что, хотя и ведущий и ведомый имеют одинаковый адрес ведомого в соответствующих регистрах, но не происходит ADDCODE. Хотя, как видно из кода, я использую метод Поллинга. Регистр ADDCODE должен иметь тот же адрес, что и адрес ведомого, что также не происходит.

Настройки оборудования были проверены как правильные.

Попытка выполнить проверку по шлейфу на том же MCU с использованием I2C1 в качестве главного передатчика и I2C2 в качестве подчиненного приемника. Код застревает на части, как показано ниже:

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;  

}

Кто-нибудь может помочь с этим, пожалуйста?

1 Ответ

0 голосов
/ 12 сентября 2018

Наконец, удалось решить проблему, заметив, что выводы GPIO не были настроены должным образом в режиме с открытым стоком альтернативной функции. Вторая проблема, выявленная после того, как ведомое устройство начало подтверждать совпадение адресов, не было никакой передачи данных, которая была решена путем написания процедуры для очистки бита ADDR в регистре ISR I2C.

...