硬汉嵌入式论坛

 找回密码
 立即注册
查看: 983|回复: 3
收起左侧

[技术讨论] HAL 串口的错误状态如何处理?

[复制链接]

16

主题

76

回帖

124

积分

初级会员

积分
124
发表于 2025-2-20 10:53:05 | 显示全部楼层 |阅读模式
STM32F407ZGT6 使能空闲中断和 DMA 的 uart3 与 esp8266 通信,会触发串口错误。在串口错误回调函数中,作以下处理:

        __HAL_UNLOCK(huart);                      // 先解锁
        HAL_UART_DMAStop(huart);               // 再停止DMA
        memset(rx_buffer, 0, BUFFER_SIZE);     // 清空缓存(按需选择)
        HAL_UARTEx_ReceiveToIdle_DMA(huart, rx_buffer, BUFFER_SIZE); // 重启接收

我在网上看有人说这种情况下要先解锁再停止 DMA,也有说停止 DMA 接受与重启接受之间需要一段时间反应,我想把 DMA 停止放到解锁之前,提高一点反应时间,所以想问一下,解锁和停止 DMA 能不能调换顺序?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-21 08:49:33 | 显示全部楼层
不建议手动调用下面这两个来处理。
__HAL_UNLOCK(huart);                      // 先解锁
HAL_UART_DMAStop(huart);               // 再停止DMA

因为在函数HAL_UARTEx_ReceiveToIdle_DMA里面都做处理了,建议使用函数HAL_UARTEx_ReceiveToIdle_DMA的回调来处理。
------
使用函数HAL_UARTEx_ReceiveToIdle_DMA做超时接收整理:
1、半DMA传输完成中断UART_DMARxHalfCplt     调用  HAL_UARTEx_RxEventCallback,标识继续为HAL_UART_RECEPTION_TOIDLE
2、DMA传输完成中断UART_DMAReceiveCplt       调用   HAL_UARTEx_RxEventCallback,标识继续为HAL_UART_RECEPTION_TOIDLE
3、如果传输期间触发了空闲,DMA又没有传输完成,调用串口中断HAL_UART_IRQHandler,空闲标识处理的HAL_UARTEx_RxEventCallback,并设置HAL_UART_RECEPTION_STANDARD
回复

使用道具 举报

16

主题

76

回帖

124

积分

初级会员

积分
124
 楼主| 发表于 2025-2-21 10:58:20 | 显示全部楼层
eric2013 发表于 2025-2-21 08:49
不建议手动调用下面这两个来处理。
__HAL_UNLOCK(huart);                      // 先解锁
HAL_UART_DMAS ...

目前采用 DMA + 空闲中断,在调试的时候发现空闲中断未接受完数据,添加一个 TIM 超时来确认数据接受完毕。调试过程中发现在接受 esp8266 发送的长数据(且中间有时间间隔)时,会触发串口错误 FE、NE,进入了 HAL_UART_ErrorCallback 回调函数,目前在 HAL_UART_ErrorCallback 函数中清除错误标志位,在 main 的 while(1) 停止 MDA 并重启接受。

如果按照大佬的说法设计数据接受逻辑的话,我想要接受完数据再去解析,该如何判断何时接受完毕?
附件是我的工程代码

ESP8266.zip

1.06 MB, 下载次数: 3

回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117512
QQ
发表于 2025-2-22 08:15:39 | 显示全部楼层
刘心武 发表于 2025-2-21 10:58
目前采用 DMA + 空闲中断,在调试的时候发现空闲中断未接受完数据,添加一个 TIM 超时来确认数据接受完毕 ...

ESP8266的AT处理,推荐别用DMA, 用UART FIFO就行,关键简单省事。我感觉使用DMA反倒麻烦

这个是我们的

V5-204_Matlab的WIFI通信实现.rar (5.91MB)


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 06:32 , Processed in 0.041981 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表