I2C не подтверждает адрес ведомого

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

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

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

Попытка выполнить тест Loopback на том же 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;

}

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

0

Решение

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]