STM32 не работает SPI3.
Обычно перед тем как собирать какое-то устройство реализую на макетке базовый функционал, так было и в этот раз. После того как базовый функционал был реализован, начал разводить плату, походу выяснилось, что гораздо проще развести плату если использовать SPI3, нежели SPI2, который использовался в проекте. Ну зачем создавать себе трудности, подумал тогда и развёл плату, используя SPI3.
В итоге плата получилась двухстороняя, с дорожками 0.3 и множеством переходных отверстий, в общем лениво было возиться, по этому решил заказать, её у знакомых ребят. Сделал заказ и пока плата делалась, решил подправить программу, заменить SPI2 на SPI3. Подправил — не работает, первым делом проверил конфигурацию выводов и ошибок не нашёл, следующий шаг — тактирование порта и альтернативных функций, там то же ошибок не обнаружил. Хм странно, всё настроил, но не работает, но вот вопрос, что именно не работает? Подключился осциллографом к выводу, SCK(PB3) – тактирование есть, а на двух других ножках(MISO – PB4 и MOSI – PB5) ни чего нет. Из этого можно сделать следующий вывод, SPI работает, но контроллер(в режиме мастера) не отправляет ведомому посылки. Вот и начались приключения, а это значит, что можно открывать RM0008 и читать. Интересно, то что в самом начале описания работы SPI модулей есть Warning, в котором жирным шрифтом пишется, что некоторые выводы SPI3 по умолчанию использоваться для отладки по jtag и если всё таки хочется задействовать SPI3, то надо отключить jtag, а для отладки можно использовать SWD.
А вот выводы, которые используются при отладке по jtag и среди них, неработающий у нас PB4.
Ниже скрин регистра, позволяющий выбрать средство отладки(в данном случае отключить jtag) и таблица, которая поясняет какие выводы при той или иной комбинации задействуются.
Так как jtag мне не нужен, отключил его, добавив всего одну строчку в код.
SPI3 заработал и на этом очередное путешествие подошло к концу)))
В итоге плата получилась двухстороняя, с дорожками 0.3 и множеством переходных отверстий, в общем лениво было возиться, по этому решил заказать, её у знакомых ребят. Сделал заказ и пока плата делалась, решил подправить программу, заменить SPI2 на SPI3. Подправил — не работает, первым делом проверил конфигурацию выводов и ошибок не нашёл, следующий шаг — тактирование порта и альтернативных функций, там то же ошибок не обнаружил. Хм странно, всё настроил, но не работает, но вот вопрос, что именно не работает? Подключился осциллографом к выводу, SCK(PB3) – тактирование есть, а на двух других ножках(MISO – PB4 и MOSI – PB5) ни чего нет. Из этого можно сделать следующий вывод, SPI работает, но контроллер(в режиме мастера) не отправляет ведомому посылки. Вот и начались приключения, а это значит, что можно открывать RM0008 и читать. Интересно, то что в самом начале описания работы SPI модулей есть Warning, в котором жирным шрифтом пишется, что некоторые выводы SPI3 по умолчанию использоваться для отладки по jtag и если всё таки хочется задействовать SPI3, то надо отключить jtag, а для отладки можно использовать SWD.
А вот выводы, которые используются при отладке по jtag и среди них, неработающий у нас PB4.
Ниже скрин регистра, позволяющий выбрать средство отладки(в данном случае отключить jtag) и таблица, которая поясняет какие выводы при той или иной комбинации задействуются.
Так как jtag мне не нужен, отключил его, добавив всего одну строчку в код.
//отключаем jtag, включаем swd
AFIO->MAPR |= AFIO_MAPR_SWJ_CFG_1;
SPI3 заработал и на этом очередное путешествие подошло к концу)))
Похожие статьи