2016-06-15 5 views
1

Привет, ребята, я пытаюсь выполнить последовательное rx-прерывание с использованием библиотеки stm32 HAL, и у меня возникла ошибка, о которой я не знаю.STM32 HAL rx interrupt не может правильно получить байты

Это действительно простая программа. ПК предоставляет байты для платы stm32, и stm32 будет брать эти байты, используя процедуру прерывания rx.

Проблема в том, что я отправляю более 4 байтов, таких как «12345», плата stm32 получает только 4 байта, а последний один байт (5) куда-то ушел. Вот картина для лучшего понимания.

enter image description here

Вот мой код в рутину HAL_UART_RxCpltCallback:

HAL_UART_Transmit(&huart4, &receive1, 1, 1000); 
HAL_UART_Receive_IT(&huart4, &receive1, 1); 

Если у вас есть какие-либо идеи, пожалуйста, комментарий :)

ответ

3

проверки функции: HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

  1. сделать размер достаточно длинным, например, 16bytes;
  2. введите HAL_UART_RxCpltCallback рутину в функцию HAL_UART_Receive_IT(...). Я предлагаю вам, чтобы добавить конечный символ обнаружения (\n), как это:

    if ((*huart->pRxBuffPtr) == '\n') { 
        HAL_UART_RxCpltCallback(huart); //-------------------------------------------///////// 
    } else { 
        huart->pRxBuffPtr++; 
    } 
    

 Смежные вопросы

  • Нет связанных вопросов^_^