5081|5

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

采用DMA从串口接收较大数据后DMA就被屏蔽了,为什么??? [复制链接]

各位大侠好,
我的芯片是STM32F103ZC,
采用DMA从串口接收数据,配置成循环模式以及配置接收缓冲区大小为16字节,当接收满之后就在
中断处理函数中将数据取走,当传输几 K 数据时能正常接收,但是当数据大了之后(比如几百 K )
就会产生有时候能正常接收,有时候会出现 DMA 卡死的现象,也就是再也接收不到数据了,
查看寄存器的值发现 USART 的 DMA 接收使能位(DMAR)还是使能的,但是 DMA 的使能位就被清
除了,我在程序中初始化 DMA 并使能之后就再也没有再屏蔽过它,难道硬件遇到特殊情况下会自动
屏蔽 DMA 。于是查看参考手册的 DMA 错误管理,发现如果 DMA 产生传输错误时硬件会自动屏蔽
DMA,然后将错误标志位挂起。为了验证传输过程中是否产生了错误,于是打开了传输错误中断,
在调试过程中发现当DMA接收的数据不正确时确实进入了DMA错误中断,但是为什么会产生错误中
断呢???
继续查看手册,发现这是因为产生了总线错误。这个就很难明白了,我并没有对被保护的内存块进
行操作,为什么会产生总线错误呢??而且在调试 DMA 从 USART 接收数据的时候是有时候能正常
接收,而有时候就接收失败。
大侠帮我分析分析问题出在哪里啊??
先先谢谢了。
此帖出自stm32/stm8论坛

最新回复

                                 如果你的DMA缓冲区不是在片内的SRAM,而是使用FSMC扩展的RAM,则可能是碰到了FSMC的一个Bug,这个问题在ST发布的勘误手册中有描述。  详情 回复 发表于 2009-10-21 11:07
点赞 关注
 

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
                                 造成总线错误原因有很多,不一定是对保护的内存块进行操作产生总线错误。这个原因要根据你的整个系统来查看,你可以先将你的串口的接收程序独立出来,使用DMA接收数据,不做其他任何操作,再进行测试,看看是否出现同样的错误?
此帖出自stm32/stm8论坛
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
谢谢楼上的
按照你的方式我重新做了一遍,另外添加了DMA传输错误中断处理,在DMA传输错误中断处理函数中重新使能了DMA(因为在这个时候硬件会自动禁能DMA),然后清除错误中断标志位。但是添加了这些处理之后系统居然出现了 HardFault 异常。这是为什么啊???
好急啊,烦死了,DMA这个问题卡了差不多一个星期了。
此帖出自stm32/stm8论坛
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 请大侠指点迷津
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 为了避免这种现象,你是可以通过清错误标志位来解决的
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 如果你的DMA缓冲区不是在片内的SRAM,而是使用FSMC扩展的RAM,则可能是碰到了FSMC的一个Bug,这个问题在ST发布的勘误手册中有描述。
此帖出自stm32/stm8论坛
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表