Antimouse (24.02.2016 14:22 - 14:56, просмотров: 86) ответил Гудвин на Похоже вот здесь хлопец столкнулся с "французким шармом" STM32 - отсутствием fifo в uart и, как следствие, "гонками" DMA пересылок. NXP рулит, короче ;)
Посмотрел его творчество. Похоже никаких гонок там нет, используется один единственный канал DMA, а проблемы оттого, что он неудачно использует периферию и прерывания.
Думаю, что надо от таймера вообще запретить все прерывания, синхроимпульсы
выпихнуть от синхронизированных таймеров по PWM, SPI-DMA запускать также от
таймеров автоматически (разрешить триггер). А вот прерывания сделать по
"DMA-complite", чтобы предварительно заряжать новую строку и вычитывать UART,
если хоть один байт "валяется" в регистре. (прерывания каждые 64мкс проглотят
115200 бод - это же порядка 87мкс на один байт)
И уж если поставить работу UART по DMA, то по двойному буферу, и обрабатывать
в прерывании с низким приоритетом, и для этого настроить группы по вытеснению,
чего хлопец так и не сделал, хотя ему прямо об этом подсказали.