Добрый день мужики, а также немногочисленные дамы!
Имеем STM32F103RB. Передаю периодически блок данных из памяти через USART (250kbps, 8 бит, 2 стоповых) посредством DMA в нормальном (не циклическом) режиме. Чтобы определить завершение передачи предыдущего пакета и начать следующий организовал прерывание по флагу DMA "Transfer Complete". Что я далее в прерывании делаю, пока не суть важно. Интересно то, что прерывание возникает не в момент, когда DMA засунул в USART последний байт, а раньше - когда предпоследний! Это я определил осциллографом, дергая в указаном прерывании отладочными ногами и наблюдая за передачей от USART: фронт возникает незадолго до того, как из USART начинает уходить предпоследний байт.
Конечно, раздел "Single byte communication", стр. 766 мануала RM0008, я читал. Там очевидно объяснено, что если USART было пустой, первые две следующие друг за другом быстрые записи в регистр данных USART возможны, т.к. флаг TXE возникает тут же и после первой записи. Однако в моем случае DMA передает довольно шибко пол-кило байтов, и к моменту прерывания USART еще возится в поте лица с предыдущими.
Это баг? Или я что проглядел?
Спасибо.
Сообщение отредактировал KnightIgor - Feb 22 2011, 12:54
|