Приветствую. Столкнулся с проблемой. Имею контролер STM32F103C8T6. Пытаюсь на нем реализовать работу I2C на прерываниях. Проблема заключается в следующем. В момент когда нужно отправить рестарт этого не происходит. Прерывания ITBUFEN выключены, пользуюсь только ITEVFEN.
Последовательность следующая: Старт - отправка адреса - отправка адреса регистра (с которого читать) - отправка повторного старта. (тире это вход в прерывание) Так вот, после отправки второго старта ничего не происходит.
НО, если я перед отправкой повторного старта считаю DR, то повторный старт отправиться.
- Код:
(void)I2C2->DR;
I2C2->CR1|=I2C_CR1_START;
Есть и другой вариант, после установки старт отправить в регистр DR какой то мусор то старт произойдет. И мусор не будет отправлен.
- Код:
I2C2->CR1|=I2C_CR1_START;
I2C2->DR=0x55;
Есть еще вариант, когда передаю последний байт адреса регистра, сразу записать старт, то когда зайду в прерывание для отправки старта и отправлю его еще раз то старт передается. В чем может быть проблема? Что я делаю не так?
Такое чувство буд то не сбрасывается какой то флаг, и не дает отправить старт. Хотя в этот момент смотрел отладчиком, и ничего такого не увидел.
Так же пробовал делать паузу между отправкой рестарта, это не помогло.
В само прерывание для отправки старта заходит, но он не генерируется.
- Вложения
-
- I2C.c
- (17.95 KiB) Скачиваний: 53