【问题标题】:how to get data from different uart in same callback function in stm32如何在stm32的相同回调函数中从不同的uart获取数据
【发布时间】:2022-01-04 08:26:12
【问题描述】:

我正在使用 stm32f407 控制器。我正在使用 2 UART - 2&3。我第一次被打断了,但第二次我在 uart 2 上被打断 - 我没有在 uart3 上被打断。

下面是我的回调函数:

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart2.Instance == USART2)
    {
        gsm.RxData[gsm.RxDataCnt]=Uart_Rx_Buffer;
        gsm.RxDataCnt=(1+ gsm.RxDataCnt) % MAX_Buff_Size;
        HAL_UART_Receive_IT(&huart2,&Uart_Rx_Buffer, 1);
    }
    else if(huart3.Instance == USART3)
    {
        lidar.RxData[lidar.RxDataCnt]=uart3_RX_Data;
        lidar.RxDataCnt=(1+ lidar.RxDataCnt) % MAX_LIDAR_BUFFER;
        HAL_UART_Receive_IT(&huart3,&uart3_RX_Data, 1);
        if(lidar.RxDataCnt >MAX_COUNT_BUFFER)
        {
            lidar.received = true;
        }
    }
}

【问题讨论】:

  • 如果您提供完整代码并解释出现此行为时的场景会更好(您对微控制器做了什么?)。

标签: c embedded stm32f4discovery


【解决方案1】:

if-语句中的条件始终为真。您需要检查函数参数中提供的huart 句柄的实例,即:

    if(huart->Instance == USART2)

    else if(huart->Instance == USART3)

【讨论】:

  • 是的,你是对的,我已经解决了这个问题。我只使用函数参数 huart->instance == USART2.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 2015-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多