硬件平台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

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






