как лучше всего создать регистр сдвига с stm32

Я использую STM32F031K6, работающий на частоте 40 МГц, и я хочу разработать программу, которая действует как циклический регистр сдвига - для его синхронизации используется внешний триггер, значения в регистре сдвига сдвигаются влево каждый раз, когда нарастающий / спадающий фронт полученный. выход - один контакт высокого или низкого уровня.

Мне нужно сделать время между фронтом тактирования и выходом менее 0,5 мкс, или, если это не удается, как можно быстрее. Значения сдвигового регистра могут быть изменены, а длина также может быть изменена, но пока я просто начинаю с байта, например 11000010.

Сначала я думал реализовать это с помощью внешнего прерывания, но было высказано предположение, что может быть лучший способ реализовать это.

любая помощь очень ценится


person prune    schedule 05.07.2020    source источник


Ответы (1)


Вы можете использовать периферийное устройство SPI STM32F0 для своей задачи. При настройке в ведомом режиме каждый раз, когда в сигнале SCK обнаруживается фронт внешнего тактового сигнала, MISO будет устанавливаться на следующий бит значения, загруженного во внутренний сдвиговый регистр через регистр данных SPI.

Ознакомьтесь с главой о последовательном периферийном интерфейсе (SPI) в справочном руководстве STM32F0. Особенно обратите внимание на разделы, посвященные следующим ключевым словам:

  • Общее описание: блок-схема SPI
  • Подчиненный режим (выбор ведущего: конфигурация ведомого)
  • Односторонняя связь: режим только передачи (RXONLY = 0)
  • Управление контактами выбора ведомого (NSS): программное управление NSS (SSM = 1)
  • Формат кадра данных (размер данных может быть установлен от 4 до 16 бит)
  • Конфигурация SPI

Блок SPI легко настраивается, например относительно полярности тактового сигнала. Поскольку это независимый аппаратный блок, он должен выдержать требуемое время реакции 0,5 мкс. Микропрограммное обеспечение MCU необходимо настроить блок SPI, а затем предоставить новые данные в блок SPI каждый раз, когда устанавливается флаг пустого буфера Tx (TXE). Это также можно сделать с помощью прерывания (TXEIE) или даже с использованием канала DMA (TXDMAEN) с кольцевым буфером. В последнем случае функции сдвигового регистра работают полностью независимо от ядра MCU (после настройки).

person Blue    schedule 07.07.2020
comment
спасибо, это очень полезно. Будет ли использование MISO означать, что я не могу использовать программу с подключенным stlink v2? Обычно я использую это в режиме отладки, подключенном к cubeIDE - person prune; 08.07.2020
comment
SCK и MISO - это выделенные выводы SPI - не путать с выводами порта отладки последовательного порта SWCLK и SWDIO. Насколько я вижу в таблице данных, выводы SWD PA13 / PA14 не используются совместно ни с одним из выводов SPI - это означает, что MISO можно использовать параллельно с отладчиком ST-Link без каких-либо ограничений. - person Blue; 08.07.2020