Цитата(Метценгерштейн @ Oct 7 2016, 16:02)

а еще такой момент- не указал нигде в коде, что прерывания по I2C имеют высший приоритет.
Код
NVIC_SetPriority(I2C1_IRQn, 0); // так не сделано
может надо указать все-таки? Может из-за этого лагать?
Не исключено. Мастер он и есть мастер, считает если послан запрос, то обязательно должен быть ответ от слейва.
В противном случае он считает что слейва нет, он неисправен и прочие напасти. Зависит от фантазии писателя.
Например, может переинициализировать свою периферию, и проверить шину на залипание.
Если он видит залипшую шину, то может попытаться ее "разлепить" путем подачи пакета SCL (не помню 8 или 9 клоков до "отлипа").
(такая ситуация у меня была с 24LC16 на отладке).
Если слейв не может ответить, то (слейв) должен перевести шину в режим "ожидания готовности слейва",
кажется это притянуть SCL на 0. Но лучше сразу дать ему что-надо по протоколу - чтобы не заморачиваться с реализацией ожидания.
Приоритет прерывания, скорее всего значения не имеет.
Имеет значение "наполнение" вектора прерывания.