ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
984163 Топик полностью
il-2 (06.03.2020 12:27, просмотров: 362) ответил Aleksey_75 на барабашка какая-то, вкладываю исходники
Короче, слухай сюды: 

1. Ты запускаешь передачу блока команды (SPI_DEV_DMA_TX->CCR |= DMA_CCR1_EN;) Однако это не значит, что сразу после этой команды заработает SPI и взведется BUSY. Тактирование SPI выполняется синхронно с прескалером, чем больше его значение, тем больше может быть интервал между загрузкой в регистр SPI->DR и началом передачи, да и сама транзакция DMA может проходить с задержкой. Так что на момент проверки флага BUSY он вполне может быть еще не установлен. Что у тебя видимо и происходит, т.к. по твоему-же утверждению чем ниже скорость (больше прескалер), тем все хуже.

2. Во время пердачи блока команды у тебя идет и прием данных, при этом устанавливается флаг RXNE, который используется как флаг запроса для DMA_RX. Т.к. после отправки блока команды ты этот флаг не сбрасываешь, то естественно что после запуска DMA_RX ты получаешь N холостых байт (N - размер буфера RX).