Моя настройка следующая: плата Nucleo (Nucleo 144 со встроенным STM32H743) настроена как SPI Master. Другая идентичная плата сконфигурирована как SPI Slave.
Для Master I настроить SPI1 (контакты GND, D11, D12 и D13 - PA5,6,7- разъема CN7) со следующей конфигурацией:
- GPIO: очень высокая скорость, альтернативная функция 5
- SPI: прескалер DIV8, разрешены прерывания, симплексная связь, нет ведомого выбора
- все часы настроены на максимум (процессор 400 МГц, et c ...)
Для подчиненного устройства я также настроил SPI1 (те же контакты), работает нормально.
Затем я попытался переключиться на периферийное устройство SPI2 для ведомой платы и не смог заставить его работать (без изменений для основной платы). Я выбрал контакты D18 (PB13) для SCK, A7 (PC2) для MISO и A2 (PC3) для MOSI.
Я проверил следующие пункты:
- SPI2 периферия часы включены
- GPIOB и C часы включены, а контакты PB13, PC2 и PC3 настроены так же, как PA5,6,7 в предыдущей настройке.
- для GND I пробовал разные выводы GND на плате, я не знаю, если это имеет значение.
- GP IOs, используемый для SPI2, не используется в другом месте в моем коде. Я получил их из таблицы данных STM32H743ZI
Что я вижу:
- Мой ведомый все еще правильно получает сигнал SCK: Я получаю правильное количество прерываний RXP .
- данные, полученные ведомым устройством, повреждены.
- однако данные, передаваемые ведомым устройством ведущему, верны.
Я думаю, что сигнал MOSI плохо настроен, физически или логически. Я пробовал другие выводы GPIO, чья альтернативная функция может быть SPI2_MOSI, но с таким же поведением.
Есть ли специфичность для SPI2 и / или этой настройки GPIO? Имеет ли значение GND на плате?