ок. напишу последний раз. На прерываниях если надо про читать 10 байт, то пишешь в буфер передачи 10 байт мусора или не пишешь т. к. память всегда что-то содержит и слейву обычно похуй на содержание от мастера пока он отвечает, и после каждого переданного байта читаешь содержимое регистра в rbuff свой как то так посмотри ты уже примеры SPL от ST там все разжевано - и мастер и слейв, и поллинг и интерупт и ДМА
Комментарии: 12
Serg
ты не видишь вопрос?
Danil
Наехал на человека Там в книги пример, а не мантра Шлют для примера, делать этого не надо Я думал мы разобрали, что отправка и приём это не зависимые вещи, но делаются в один и тот же такт,
Serg
для какого нах примера? много выше же сказали в SPI невозможно только слать или только читать
Danil
Можно, Для-программиста Для железо оно принимать нули может И отправлять нули Для программиста, на это кладется болт Сказали правильно, но тебя это не касается
Serg
SPI_I2S_SendData(SPIx, data); // Зависнуть тут не может, потому что SPI всё равно отработает посылку while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_BSY)); // В силу особенностей организации SPI на STM32, нельзя только писать, // после любой записи нужно прочитать, дополнительного времени это не требует return SPI_I2S_ReceiveData(SPIx); "В силу особенностей организации SPI на STM32, нельзя только писать, после любой записи нужно прочитать, дополнительного времени это не требует"
Danil
Гонят
Serg
если не читать, что будет?
Danil
Флаг там нормально сбрасывается Будет тоже самое что если не читать Там два разных регистра, на отправку и приём
Serg
А если надо только прочитать? SPI_SendData(SPIx, 0xFF) тоже не обязательно?
Danil
Им друг на друга срать Тоже не обязательно
Serg
потому что SPI двухнаправленный он когда пишет, одновременно и читает поэтому входной буфер получает данные от слейва, даже если тот ничего писать не хочет и буфер нужно зачистить, прочитав его.
Danil
Там будет либо нуль либо число на приём Они два разных, регистра, но запрос через один То есть в программе DR а на деле их два Если ты пишешь в DR то он в один регистр пишет, если читаешь в другой Он-один раз нулем запишется и пока ты не прочитаешь, там будет ноль Тебе и говорят, читай что там лежит, что бы данные не потерять С каждым тактом уходит и приходит бит Когда прошло 8 тактов, данные из отправки удаляются и флаг отправки поднимается, а данные из приёма если флаг приёма опущен копируются И флаг приёма поднимается И происходит прерывания для каждого флага Тебе просто-надо забирать данные если флаг поднят на приём, и отправлять если спущен на отправку Все остальное сделает железо Сразу писать данные на флеш не стоит Кидай в буфер или из буфера Ну-вообщем я не понял вопроса Ты меня-в конец запутал, пойду курить мануалы