Стартовый бит STM32 I2C1 не установлен в регистре SR1

StackOverflow https://stackoverflow.com/questions/2556794

  •  23-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь запрограммировать stm32 для взаимодействия с моей EEprom i2c, но кажется, что каждый раз, когда я говорю:

I2C_GenerateSTART(I2C1, ENABLE);
while( !(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT)) );  the code hangs here

Я прошел через отладчик и обнаружил, что флаг SR1 bit 0 (который является флагом, генерируемым начальным битом) не установлен, из-за чего код зависает.Я вижу на осциллографе, что начальный бит был сгенерирован, и иногда это срабатывает.обычно он ломается, когда я пытаюсь выполнить несколько записей подряд.Я проверил HW, все выглядит нормально, я проверил частоту, которую я использую на шине i2c, она составляет 100 кГц в пределах 24lc1025 eeprom.

есть какие-нибудь идеи,

Спасибо

Это было полезно?

Решение

Поскольку вы говорите, что это обычно прерывается, когда вы выполняете несколько операций записи подряд, возможно, вам захочется убедиться, что вы не нарушаете это примечание в таблице данных STM32 для STOP бит в управляющем регистре I2C_CR1:

Примечание:Когда в STOP, START или PEC бит установлен, программное обеспечение не должно выполнять какую-либо запись доступ к I2C_CR1 до того, как этот бит будет очищен аппаратным обеспечением.В противном случае существует риск установки второго STOP, START или PEC просьба.

Как только вы установите STOP бит вам нужно убедиться, что аппаратное обеспечение очистило его, прежде чем вы напишете следующий START немного.

Другие советы

Проверьте исправления для вашего устройства (получите их с веб-сайта ST).В STM32 много ошибок в реализации I2C.Ошибки предоставляют программные обходные пути для них.

Кроме того, при использовании исходных файлов драйверов, обычно поставляемых с платформами STM32, не забудьте прочитать заголовки!Они могут быть очень полезны, особенно для новичков (вроде меня), которые не уверены, с чего начать.

В этом случае вы бы смотрели на stm32f4xx_i2c.c

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top