Вы можете показать фрагмент кода для остальных людей, чтобы они могли помочь, но в любом случае я помню, что столкнулся с той же проблемой. Вот как я уменьшаю этот дополнительный временной разрыв;
Используйте прямой доступ к регистру вместо функций, как для отправки, так и для проверки флагов.
Если это также не сработает, вместо проверки флага вы можете использовать простой цикл for с некоторой задержкой, чтобы поддерживать тактовый сигнал достаточно низким, но не слишком большим, проверьте с помощью осциллографа, чтобы найти точное число итераций.
Также убедитесь, что во время отправки сообщения не обслуживается прерывание, может быть прерывание ISR между концом передачи и кодом, который устанавливает высокий уровень сигнала CLK. Если у вас есть ISR, которые происходят асинхронно и имеют большой размер, это, вероятно, так.
SPI1->DR = (uint16_t)Data;
while(!(SPI1->SR & SPI_SR_TXE));
PS: я сделал это на Cortex-M3, без RTOS, с периферийной библиотекой STD.
Изменить: также попробуйте только с флагом занятости, таким образом проверяя только EOC while(SPI1->SR & SPI_SR_BSY);
person
İlkerK
schedule
10.08.2018
m4
? - person uzsolt   schedule 15.06.2018