打印
[STM32G0]

stm32g0 usart dma正常运行一段时间后,会出现只能接收,不能发送的问题

[复制链接]
877|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一抹笑zZ|  楼主 | 2023-1-28 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
stm32g0 usart dma运行一段时间(频率不高,也不一定会出现),会出现只能接收,不能发送的问题,且只能通过复位单片机恢复,这里usart用的是hal库的485自动切换
在接收到485 的命令后,有电机会启动,然后会启用HAL_I2C_Master_Transmit(hi2c, (address<<1)|0x40, pData,size, 200);  这条命令我是放在1ms的定时器中断里的,会一直调用
自己感觉问题出现在这里的可能性比较大,但是不明白为什么会导致485的问题,因为故障出现的不频繁,现在没能通过调试定位到问题。
希望大神们帮忙想想可能的原因,谢谢!

使用特权

评论回复
沙发
一抹笑zZ|  楼主 | 2023-1-28 17:04 | 只看该作者
自己顶一下

使用特权

评论回复
板凳
blust5| | 2023-1-28 17:45 | 只看该作者
串口搭配DMA使用的情况我之前遇到过一次类似的问题,最终定位到是一个配置的锁锁上了但是没有流程去打开了,导致接口重新初始化失败。你可以检查一下有哪些地方具有复位或初始化串口或DMA的地方可能会被中断打断之类的

使用特权

评论回复
地板
一抹笑zZ|  楼主 | 2023-1-28 22:13 | 只看该作者
blust5 发表于 2023-1-28 17:45
串口搭配DMA使用的情况我之前遇到过一次类似的问题,最终定位到是一个配置的锁锁上了但是没有流程去打开了 ...

开始都是正常的,能正常运行一段时间,发生问题是在在接收一个485命令后,会启动一个有刷电机,1ms定时器内运行阻塞时常200us的i2c,然后出现异常,频率很低

使用特权

评论回复
5
blust5| | 2023-1-29 08:33 | 只看该作者
一抹笑zZ 发表于 2023-1-28 22:13
开始都是正常的,能正常运行一段时间,发生问题是在在接收一个485命令后,会启动一个有刷电机,1ms定时器 ...

我遇到的也是一开始是正常的,因为我的应用里数据量比较大,所以在数据丢包的情况下会重新复位串口和DMA配置,所以偶尔会出现被异常锁住的情况,也不是每次都出现,出现的几率也不大,我也是花了好多时间才确定的。

使用特权

评论回复
6
一抹笑zZ|  楼主 | 2023-1-29 10:41 | 只看该作者
blust5 发表于 2023-1-29 08:33
我遇到的也是一开始是正常的,因为我的应用里数据量比较大,所以在数据丢包的情况下会重新复位串口和DMA ...

为什么会导致锁住,你是怎么解决的呢

使用特权

评论回复
7
blust5| | 2023-1-29 10:55 | 只看该作者
一抹笑zZ 发表于 2023-1-29 10:41
为什么会导致锁住,你是怎么解决的呢

是在运行某个初始化函数的时候需要先锁住某项设定,在这个函数里进行参数修改,退出之后再解锁。
然后异常发生的时候这个函数运行过程中被打断,导致没有正常解锁,后续再次运行这个函数时发现已经被锁直接退出,于是一直无法解锁
我的解决方案是,出现这个问题之后直接强制解锁,然后重新复位初始化相关功能

使用特权

评论回复
8
blust5| | 2023-1-29 10:57 | 只看该作者
我的应用环境是基于HAL库的freeRTOS系统

使用特权

评论回复
9
一抹笑zZ|  楼主 | 2023-1-29 11:31 | 只看该作者
blust5 发表于 2023-1-29 10:57
我的应用环境是基于HAL库的freeRTOS系统

那感觉好像不是一个问题,我的是裸奔的,也没有复位初始化的操作。而且很奇怪,能通过485接收指令,但是不能发送

使用特权

评论回复
10
blust5| | 2023-1-29 15:41 | 只看该作者
一抹笑zZ 发表于 2023-1-29 11:31
那感觉好像不是一个问题,我的是裸奔的,也没有复位初始化的操作。而且很奇怪,能通过485接收指令,但是 ...

那可能是不一样的问题

使用特权

评论回复
11
xch| | 2023-2-1 17:40 | 只看该作者
没测 TXD 波形?

使用特权

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

本版积分规则

31

主题

160

帖子

0

粉丝