Easyelectronics.ru

Электроника для всех
Текущее время: 23 окт 2019, 19:06

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Пустой первый байт при приеме (CubeMX+HAL+USART+DMA)
СообщениеДобавлено: 29 июн 2019, 23:30 
Здравствуйте!

Зарегистрирован: 29 июн 2019, 22:20
Сообщения: 2
Добрый день, уважаемые форумчане!
После недели мучений и поисков, решил все таки обратится к Вам за помощью...

Имеется два одинаковый контроллера STM32F303K6T6, настроенные идентично с помощью CubeMX.
На них настроены USART1 на асинхронную работу (прием и передача), размер буферов у обоих составляет 20 байт. С отправкой данных никаких проблем, но вот с приемом...

Код:
// Инициализация DMA для приема 20 байт. DMA настроен как Circular
HAL_UART_Receive_DMA(&huart1, USART_BUFFER_RX, USART_BUFFER_COUNT_RX);
__HAL_DMA_DISABLE_IT(&hdma_usart1_rx, DMA_IT_HT | DMA_IT_TE);

//Функция, которая вызывается после полного заполнения буфера (обработка данных)
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)  {  }


Один из контроллеров принимает и обрабатывает данные просто прекрасно, а вот второй после инициализации и получении первого пакета принимает первым байтом 0x00, что следовательно сдвигает счетчик буфера DMA и в дальнейшем все данные "сдвинуты" на 1 байт. К примеру, если мы каждую секунду будем отправлять, к примеру, такой массив {0x01, 0x02, 0x03, 0x04, 0x05}, то первый принятый пакет будет иметь вид - {0x00, 0x01, 0x02, 0x03, 0x04}, а через секунду - {0x05, 0x01, 0x02, 0x03, 0x04}. Но самое интересное то, что при запуске приемника в режиме Debug подобного эффекта не наблюдается и все магическим образом начинает работать идеально.

Уже даже не знаю куда копать. Буду очень благодарен за помощь...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустой первый байт при приеме (CubeMX+HAL+USART+DMA)
СообщениеДобавлено: 01 июл 2019, 10:52 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 822
Да если все настроено "одинаково" рекомендую проверить не настроен ли один из ДМА как кольцевой.. :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустой первый байт при приеме (CubeMX+HAL+USART+DMA)
СообщениеДобавлено: 02 июл 2019, 00:44 
Здравствуйте!

Зарегистрирован: 29 июн 2019, 22:20
Сообщения: 2
kos писал(а):
Да если все настроено "одинаково" рекомендую проверить не настроен ли один из ДМА как кольцевой.. :)

Простите, не уточнил. Оба DMA настроены именно как кольцевые.
Но это не объясняет, почему один контроллер принимает данные верно, а второй, первый байт после инициализации принимает 0x00.
Соответственно идет сдвиг на один байт ((


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустой первый байт при приеме (CubeMX+HAL+USART+DMA)
СообщениеДобавлено: 02 июл 2019, 10:19 
Старожил
Аватара пользователя

Зарегистрирован: 01 ноя 2011, 23:51
Сообщения: 822
А зачем они кольцевые? Если вы и так знаете сколько будет принято??


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Eddy_Em


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB