stm32F4上CCM的使用

1.CCM内存介绍:

相较于F2,F4新加的一个特殊内部SRAM。64 KB CCM (内核耦合存储器)数据 RAM  不属于总线矩阵(请参见图 1 : STM32F405xx/07xx和 STM32F415xx/17xx  器件的系统架构)。只能通过 CPU  对其进行访问(dma等外设不能访问)。

 stm32F4上CCM的使用

2.用法(基于MDK):

①  先启用这部分SRAM。

stm32F4上CCM的使用

设置完后,若重新编译,map文件里就会有这块SRAM的资源分配——由于IRAM1优先使用,而且一般SRAM1够用,就不会给它分配资源。

② 使用CCM一般都要手动分配资源(确保这块内存不被外设使用),自行分配内存需要这样操作:

参考下图,不勾选USE Memory Layout from Targe Dialog,这时mdk会自动载入一个分散加载文件(.sct),修改这个文件就可以手动选择要放到CCM中的数据了。

stm32F4上CCM的使用

③ 查看.map文件,将需要的文件架到(.sct)文件中。

stm32F4上CCM的使用

例如,上图中把mem.o和memp.o中的数据放到CCM中,可以这么设置:

stm32F4上CCM的使用

编译后,可以看到资源分配:
stm32F4上CCM的使用

④如果想把程序中的某些变量放到CCM中,需要定义一个section,将这些变量放到这个section中,再由(.sct)文件分配到CCM中。

stm32F4上CCM的使用

stm32F4上CCM的使用

编译后的内存分配:

stm32F4上CCM的使用

备注:

1.测试过程中,尝试直接指定变量的内存到CCM的方法,但是定义多个变量时,编译报错。。。

2.据说把系统堆栈放到CCM中,可以提高处理效率,暂时没法测试。

3.将CCM用作高速运算缓冲,也就这种高大上的应用上才能发挥他真正存在的价值吧。

4.感谢网友大神的帖子:

http://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=602255&extra=page=&page=1

https://blog.csdn.net/zcshoucsdn/article/details/79176306

https://blog.csdn.net/anbaixiu/article/details/78832009

https://blog.csdn.net/louyangyang91/article/details/51545130