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