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

Прием данных по USART с использованием HAL + Interrupt

Доброго времени суток!
Использую библиотеку HAL для приема данных по USART с использованием прерываний.
Данные принимаются в функции HAL_UART_RxCpltCallback.

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
       {
         /* Receive one byte in interrupt mode */
         HAL_UART_Receive_IT(&huart3, rxUART3_byte, 1);

          if (huart->Instance == USART3)
            {
               *(pBuffer_UART3) = rxUART3_byte[0];
                  pBuffer_UART3++;
                      if (strstr(Buffer_UART3, "\r\n") != 0)
                         send_string_UART(&huart3, (uint8_t *)Buffer_UART3);
            }         
       }

Проблема в том, что приняв 1 байт, остальные теряются. Даже если тут же включается прием следующего байта функцией HAL_UART_Receive_IT(&huart3, rxUART3_byte, 1).

Подскажите пожалуйста как можно решить такую задачу. Если длина принимаемой посылки неизвестна но известно что посылка заканчивается символом '\r\n'.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Подобную идею реализовал но тщетно. Один байт принял, разрешил прерывание - остальные потерялись.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если HAL_UART_RxCpltCallback вызывается из прерывания USART, то в ней нужно только считывать очередной байт и записывать его в принимающий буфер. а уже в другом месте, например в main, анализировать этот приемный буфер и, при нахождении в нем нужной последовательности, формировать буфер ответа и стартовать USART на передачу. останавливать/стартовать заново прерывание не нужно. если у HAL если возможность отследить в прерывании USART флаг IDLE - то можно использовать его как признак конца передачи к контроллеру

Изменено пользователем Zeal0t

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...