Перейти к содержанию
    

maxpow

Новичок
  • Постов

    2
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Проблема с SPI на STM32F4 (HAL)

    Добрый день. Пытаюсь наладить обмен данными по SPI между двумя STM32F407VGT6, использую HAL и CubeMX. NSS настраивается на программное управление на обоих контроллерах. Мастером шлю слейву по одному байту 5 раз в секунду на скорости около 150 Кбит/с. Для отправки мастером использую функцию HAL_SPI_TransmitReceive_IT(). Для приёма использую DMA с кольцевым буфером и функцию HAL_SPI_Receive_DMA(), принимаю также по байту. Первые несколько байт (разное количество) принимаются нормально, потом происходит сдвиг данных на один бит и все последующие байты принимаются как сдвинутые. Может, кто-то сталкивался с подобным, и сможет подсказать, в чём дело? Спасибо.
  2. Доброго времени суток. Использую STM32F407 и код, собранный в CubeMX. Вкратце, в проекте подняты Ethernet (LwIP) и USB CDC (RTOS не используется); по приходу UDP-пакета в Ethernet по USB на ПК отправляется диагностическое сообщение о том, что пакет успешно принят. Проблема состоит в следующем. В случае, если UDP-пакеты приходят с фиксированным интервалом (1 мс), всё работает правильно. Но при отправке данных без интервала (используется самописная программа на Qt) большая часть UDP-пакетов не обрабатывается (на 10 пакетов приходится 3-4 сообщения о приёме). Опытным путём было установлено, что проблема возникает только тогда, когда сообщение отправляется после каждого пришедшего пакета, т.е., если отправлять, например, одно сообщение на 255 пакетов, всё работает правильно. Предположительно, получается, что проблема в том, что контроллер не принимает или не обрабатывает пакет, пока идёт отправка сообщения по USB. Вопрос -- в следующем: правильно ли я понимаю суть проблемы, и, если да, то как её решить? Может, можно увеличить какие-то буферы или поднять скорость обработки данных каким-либо способом? Заранее спасибо
×
×
  • Создать...