STM32
直播中

孙成红

7年用户 1413经验值
私信 关注
[问答]

HAL库STM32串口2发送数组给串口1异常的原因?

刚结束STM32,所以想请教一下。就是我想用串口2接收数据然后发送给串口1,串口1接收后再发送出去,可是怎么调试也不对,下面贴上我的代码,请大佬们帮个忙,纠结死了。(这部分是接收)  HAL_UART_Receive_DMA( huart2,u1buf,21);
下面是判断部分的代码  
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        UNUSED(huart);
        if(huart->Instance == USART1) //判断由哪个串口触发中断
        {
             HAL_UART_Transmit_DMA( huart1,u1buf,21,0xFFFF);  //接收到数据马上用串口1发送
                  HAL_UART_Receive_DMA( huart1,u1buf,21);    //串口1重新使能
        }
            if(huart->Instance == USART2)
                        {
                                 HAL_UART_Transmit_DMA( huart2,u2buf,21,0xFFFF); //接收到数据马上用串口2发送
                                  HAL_UART_Receive_DMA( huart2,u2buf,21);         //串口2重新使能
                        }
}

回帖(2)

李建军

2024-4-25 16:14:41
不用DMA发送,直接用查询发送,可以发出去吗?另外注意下,是否进入回调函数。
举报

小黑羊

2024-4-25 17:35:43
首先,让我们逐步分析您的代码和问题。您提到您想要使用串口2接收数据,然后将接收到的数据通过串口1发送出去。您已经提供了接收部分的代码和判断部分的代码。让我们从这两部分开始分析。

1. 接收部分的代码:

```c
HAL_UART_Receive_DMA(huart2, u1buf, 21);
```

这行代码使用DMA(直接内存访问)从串口2接收数据到u1buf数组中。这里假设u1buf是一个足够大的数组,可以存储21个字节的数据。

2. 判断部分的代码:

```c
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
    UNUSED(huart);
    if(huart->Instance == USART1) //判断由哪个串口触发中断
        // ...
}
```

这段代码是在串口接收完成中断回调函数中,用于判断是哪个串口触发了中断。这里,您已经正确地使用了`UNUSED(huart)`来避免编译器警告,因为您暂时没有使用`huart`指针。

现在,让我们来解决您遇到的问题。您提到在调试过程中遇到了异常。为了解决这个问题,请按照以下步骤操作:

1. 确保您的硬件连接正确,串口2和串口1分别连接到适当的设备。

2. 确保您的串口配置正确。检查波特率、数据位、停止位和奇偶校验位等参数是否与您的设备兼容。

3. 在`HAL_UART_RxCpltCallback`函数中添加一些调试信息,以帮助您了解程序的执行流程。例如,您可以使用`printf`函数(需要配置UART用于调试输出)或者在IDE中设置断点来检查变量的值。

4. 确保您已经正确初始化了DMA。检查DMA通道、内存地址、外设地址等参数是否正确。

5. 在`HAL_UART_RxCpltCallback`函数中,添加代码将接收到的数据从u1buf数组发送到串口1。例如:

```c
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
    if(huart->Instance == USART1) {
        // 发送数据到串口1
        HAL_UART_Transmit(huart1, u1buf, 21, HAL_MAX_DELAY);
    }
}
```

6. 如果问题仍然存在,请检查您的IDE设置,确保没有其他编译错误或警告。

7. 如果以上步骤都无法解决问题,请尝试使用简单的轮询方式(非DMA)进行串口通信,以排除DMA相关的问题。

希望这些建议能帮助您解决问题。如果您有其他问题或需要进一步的帮助,请随时提问。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分