ок. напишу последний раз. На прерываниях если надо про читать 10 байт, то пишешь в буфер передачи 10 байт мусора или не пишешь т. к. память всегда что-то содержит и слейву обычно похуй на содержание от мастера пока он отвечает, и после каждого переданного байта читаешь содержимое регистра в rbuff свой как то так посмотри ты уже примеры SPL от ST там все разжевано - и мастер и слейв, и поллинг и интерупт и ДМА

Комментарии: 12

  1. 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 тактов, данные из отправки удаляются и флаг отправки поднимается, а данные из приёма если флаг приёма опущен копируются И флаг приёма поднимается И происходит прерывания для каждого флага Тебе просто-надо забирать данные если флаг поднят на приём, и отправлять если спущен на отправку Все остальное сделает железо Сразу писать данные на флеш не стоит Кидай в буфер или из буфера Ну-вообщем я не понял вопроса Ты меня-в конец запутал, пойду курить мануалы

Не нашли ответ?

Вам также может быть интересно