STM32 DMA ADC不采样问题(及DMA串口异常)

在使用STM32F4的HAL库和FreeRTOS时,由于内存需求大,Keil可能会将变量分配到CCMRAM。然而,由于CCMRAM的DMA访问限制,导致DMA无法用于ADC采样或串口接收。在以太网项目中,结合LWIP和FreeRTOS,内存问题更加突出。解决策略是避免将数据存储在CCMRAM中,以防止DMA冲突。官方推荐将频繁访问的数据和中断函数放入CCM以优化性能,但需注意其访问限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

硬件平台STM32F4(有CCM RAM)

HAL库生成的代码如果用freertos就容易出现DMA异常,因内存占用大keil会把一些变量定义到RAM2中(CCM RAM)

而CCM  RAM  DMA是无访问权限的(是直接挂在D-bus上的,除了CPU(即Cortex-M核)之外,谁都无法访问

所以DMA无法访问CCM  RAM,也就无法实现ADC采样存储。

串口DMA收不到数据也是一个道理,我是在以太网工程中遇到的,内存占用更大(LWIP+freertos)。

解决办法:取消勾选RAM2

对于CCM,CPU能以最大的系统时钟和最小的等待时间从CCM中读取数据或者代码。官方文档说明了使用CCM的一些优势:比如将频繁读取的数据放到CCM,将中断函数放到CCM,这都能加快程序的执行速度。

还可以参考正点原子的内存管理使用RAM2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值