【问题标题】:STM32 HAL rx interrupt can't get bytes correctlySTM32 HAL rx 中断无法正确获取字节
【发布时间】:2016-10-16 05:08:21
【问题描述】:

大家好,我正在尝试使用 stm32 HAL 库进行串行 rx 中断,但出现了我不知道的错误。

这是一个非常简单的程序。 PC 向 stm32 板提供字节,stm32 将使用 rx 中断例程获取这些字节。

问题是当我发送超过 4 个字节时,例如“12345”,stm32 板只有 4 个字节,最后一个字节(5)消失了。这是图片以便更好地理解。

这是我在 HAL_UART_RxCpltCallback 例程中的代码:

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

如果你有任何想法,请评论:)

【问题讨论】:

    标签: c avr stm32 nodemcu


    【解决方案1】:

    查看函数:HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

    1. 使大小足够长,例如 16 字节;
    2. 将您的HAL_UART_RxCpltCallback 例程调用到函数HAL_UART_Receive_IT(...) 中。我建议你像这样添加一个结束字符(\n)检测:

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

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 2018-01-09
      • 2021-02-28
      • 2018-02-22
      • 1970-01-01
      • 2017-04-07
      • 2015-09-24
      • 2018-10-07
      • 2020-01-12
      相关资源
      最近更新 更多