你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F303 串口DMA接收 异常

[复制链接]
shuaishuai2599 提问时间:2018-2-2 10:29 /
各位大牛好:
    小弟使用了STM32F303芯片的串口DMA配合空闲中断来接收不定长的串口数据,现在发现有时候只能接收最开始的那一个字节(能确定发送到额数据大小没超过DMA的缓冲大小),过段时间,又会自行恢复正常。监控了串口的数据均正常,没有出现至发送一个字节的情况。请大家忙帮分析一下,代码如下,先谢谢各位

DMA初始化

DMA初始化

空闲中断里的DMA接收

空闲中断里的DMA接收

收藏 评论4 发布时间:2018-2-2 10:29

举报

4个回答
feixiang20 回答时间:2018-2-2 11:48:05
曾经在网上看到一篇STM32  串口 DMA 接收和发送的源码详解, 你可以去参考参考。另外程序异常可以逐行进行分析,修改自己怀疑的程序段的参数,我编程的时候也老出意外,也是逐行检查来解决的。另外缓冲大小是否真有限制。。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

morphlings2014 回答时间:2018-2-2 15:27:02
之前F7的时候使用是这样,好像没碰到问题。 TIM图片20180202152316.png
最好在处理IDLE中断之后,加上HAL自带的中断处理函数,HAL_UART_IRQHandler(&huart3);




评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

shuaishuai2599 回答时间:2018-2-2 18:18:58
你好,感谢指导,相比较你的程序,多了huart3.hdmarx->NDTR=UART_RX_LEN,其实这句话在下面的HAL_UART_Receive_DMA()的函数中已经实现过了。现在比较纳闷,我的为什么只接收头一个字节呢,奇怪的是自己可以恢复正常。感谢你的指导,谢谢!
dsjsjf 回答时间:2018-3-21 11:32:45
发送端发送的每个字节间时间间隔太长了,接收端误判断为空闲了

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版