Top.Mail.Ru
Уведомления
Очистить все

[Решено] STM32 HAL и HAL_UART_Recive_IT победить или убить...

 ВВ
(@vv)
New member

Собственно популярный вопрос кто-нибудь победил HAL_UART_ReceiveIT или все сдались....

Цитата
Создатель темы Размещено : 04.04.2016 21:45
(@marat)
Level 1

принимал побайтно с помощью HAL_UART_Recive_IT без проблем. Сейчас решил все таки с DMA реализовать.

ОтветитьЦитата
Размещено : 12.04.2016 18:08
(@ivan)
Level 1

А я делал 2 функции: старт приема и конец приема. Пока принудительно не остановишь - пишет в буфер кольцевой, который периодически читается. Еще делал ReceiveLine, т.е. callback вызывался при достижении r или n, но это частный случай.

ОтветитьЦитата
Размещено : 26.04.2016 19:14
(@ioann_ii)
New member

Здравствуйте.
Вот мне пришлось сейчас поковыряться в этом самом HAL_UART_Receive_IT.
Задача - выделять строки, ограниченные r или n или парой rn.
Алгоритм такой: если символ 0x0d или 0x0a, то вместо него пишется 0x00 и указатель перемещается на начало буфера. В общем как-бы просто.
Теперь ближе к проблеме: когда отлавливаю только один символ завершения строки - безразлично какой 0x0d или 0x0a формируется нормальная строка. Если-же делаю проверку на оба символа, то почему-то на момент обработки прерывания как-бы в строке уже пришли оба символа:
посылаю: 0x31 0x32 0x33 0x34 0x35 0x0d 0x0a
получаю: 0x00 0x32 0x33 0x34 0x35 0x00
т.е. получается, что к моменту вызова HAL_UART_RxCpltCallback(huart) - сам вызываю по приходу r или n следующий символ (0x0a) уже затирает начало строки....
Возникает впечатление, что программа выполняется не совсем последовательно...
Явно, Гипертерминал посылает пару 0x0d 0x0a практически без паузы, в то время как остальные символы с паузой. Если я указываю завершающие символы другие (например '4' и '5'), то затирания не происходит.
Кто-нибудь может внести ясность.
Спасибо.

ОтветитьЦитата
Размещено : 13.11.2016 18:23
 ВВ
(@vv)
New member

Хм... значит кому-то все же понадобилось... завтра на работе попробую поднять эту тему...

ОтветитьЦитата
Создатель темы Размещено : 16.11.2016 02:06
(@ioann_ii)
New member

В принципе, уже победил. Хотелось только сделать полную совместимость с тем, что было, но С не даёт возможности сделать аргументы по умолчанию... Надо ещё кое-что проверить, и тогда выложу.

ОтветитьЦитата
Размещено : 17.11.2016 21:18
(@ioann_ii)
New member

Вот, если ещё интересно, тут
http://forum.easyelectronics.ru/viewtopic.php?f=35&t=29382&start=25
выложил результат.

ОтветитьЦитата
Размещено : 18.11.2016 06:51
Поделиться: