ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1305085 Топик полностью
il-2 (30.04.2023 07:28, просмотров: 187) ответил AlexG на CH32F207. Отлаживаю передачу по I2C в режиме Master с использованием DMA. Код из STшной AN2824, почищенный от не-DMA способов передачи. Первый пакет уходит нормально, а при попытке передать второй такой-же DMA срабатывает раньше времени, сразу при разрешении канала. Напоминает эффект от оставленного несброшенным флага прерывания при использовании прерываний. В Reference Manual'е сказано, что DMA чрабатывает по событию TxE, но перед ложным срабатыванием DMA бит TxE в регистре
Ха. Логическая неувязка. 

С чего это у тебя TXE = 0??? Это значит, что там есть данные для передачи. Возможно - от предыдущего пакета.

По окончании передачи TXE должен вернуться в свое естественное состояние = 1. А ты этого не дожидаешься и настраиваешь новую передачу по DMA.

Естественно что получается "ложное срабатывание".

Я не знаток конкретно CH32F207, просто рассуждаю по аналогии с STM-овской периферией.