使用 STM32f4+DMA 时产生的transfer error问题

使用DMA 时遇到的TransferError的问题

参考链接

链接1 https://community.st.com/s/question/0D50X00009XkbPxSAJ/stm32f407-teif-dma-transfer-error-interrupt
链接2 http://www.stmcu.org.cn/module/forum/thread-604814-1-1.html

使用的芯片

stm32f407vgt6

遇到的问题

在使用sdio驱动wifi模块88W8801时,使用dma传输数据。从内存到外设,发现启动之后就产生了DMA TE 错误,LISR寄存器的TEIF位(传输错误中断标志)置位。但是发现一个数据都没有传输,在一开始就出错。

原因

从参考链接1上了解到是因为f407的 CCM 问题。从参考链接2知道CCM(Core Coupled Memory)是给F4内核专用的全速64KB RAM, 而DMA是无法访问到这的地址的,所以会产生transfer error。
mdk设置
在红框处打钩代表使用了ccm。
需要传输的数据
而因为我的要传输的数据就在这个ccm中,所以dma直接出错。

解决方法

所以只要使要传输的变量处于RAM1处就行。要么取消红框处的钩(但这会产生 No space in execution regions with .ANY selector matching 问题,因为一般会先将IRAM1用完再使用IRAM2)。第二是将内存占用降下来,我发现是我的使用的rt_thread 设置的heap过大,将它改小。其实这两个方法都是一样的意思。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值