Собственно популярный вопрос кто-нибудь победил HAL_UART_ReceiveIT или все сдались....
принимал побайтно с помощью HAL_UART_Recive_IT без проблем. Сейчас решил все таки с DMA реализовать.
А я делал 2 функции: старт приема и конец приема. Пока принудительно не остановишь - пишет в буфер кольцевой, который периодически читается. Еще делал ReceiveLine, т.е. callback вызывался при достижении r или n, но это частный случай.
Здравствуйте.
Вот мне пришлось сейчас поковыряться в этом самом 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'), то затирания не происходит.
Кто-нибудь может внести ясность.
Спасибо.
Хм... значит кому-то все же понадобилось... завтра на работе попробую поднять эту тему...
В принципе, уже победил. Хотелось только сделать полную совместимость с тем, что было, но С не даёт возможности сделать аргументы по умолчанию... Надо ещё кое-что проверить, и тогда выложу.
Вот, если ещё интересно, тут
http://forum.easyelectronics.ru/viewtopic.php?f=35&t=29382&start=25
выложил результат.