打印
[其他ST产品]

TM32G4使用串口DMA收发数据,一直进中断卡死其他任务

[复制链接]
1007|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
两只袜子|  楼主 | 2023-5-29 11:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的芯片是STM32G491,用的HAL库(CubeMx生成),最近在做485通讯测试,用串口调试助手与3台设备进行通讯,串口用的DMA模式,波特率57600,1bit起始位,8bit数据,1bit停止位,无校验。

上位机每10ms对一台设备进行参数配置

程序架构简单描述一下,有一个1ms定时器中断,用来执行优先级最低的背景循环,例如看门狗喂狗、键盘扫描等。

串口中断优先级较高,主要通过串口的空闲中断来接收上位机的数据(因为上位机发送字节数不定,因此初始化DMA的缓冲区大小时,用最大字节数进行初始化)。

开始测试后,刚开始一切正常,但过了几分钟到十几分钟不等,会出现芯片复位的情况,通过仿真器发现是程序会一直进串口中断以及对应接收的DMA通道中断,从而导致看门狗复位。

我在刚刚进入串口中断时打断点,发现ISR寄存器里全是0,此外查看串口句柄相关变量,很多也是0,例如pRxBuffPtr(指定的DMA接收缓存地址)和RxXferSize(指定的接收大小)都是0,串口接收状态指示变量RxState也是0。

感觉就像是串口被DeInit了。

我在CubeMx中将Overrun和DMA on Rx Error都关掉了,发现没有任何作用,依然会卡死程序。

感觉就是上位机发送周期10ms太快了,因为我将发送周期改为100ms就没有问题,但不知道具体问题点在哪里,麻烦大家帮我看看,谢谢了

使用特权

评论回复
沙发
香水城| | 2023-5-29 15:03 | 只看该作者


检查下UART 及DMA的相关中断请求标志位的清零情况。

再就是检查下是否可能发生数组越界访问。

使用特权

评论回复
板凳
Pretext| | 2023-5-29 16:51 | 只看该作者
1ms的中断?感觉挺短的。

使用特权

评论回复
地板
朝生| | 2023-5-29 16:52 | 只看该作者
是程序进中断后不出来了,导致看门狗复位?

使用特权

评论回复
5
芯路例程| | 2023-5-29 16:52 | 只看该作者
感觉是出现了寄存器锁死的问题,所以导致程序卡死,看门狗复位。

使用特权

评论回复
6
cr315| | 2023-5-30 11:00 | 只看该作者
检查一下数组的使用,是不是有超出的情况。

使用特权

评论回复
7
jcky001| | 2023-5-30 11:00 | 只看该作者
检查一下串口溢出状态标志位,是否有数据处理过长导致串口数据溢出的情况。


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2038

主题

7364

帖子

10

粉丝