一、CCM内存介绍

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

二、用法(基于MDK)

1、自动分配法(不建议使用)

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

2、修改配置文件指定相关参数使用该内存(建议,本人项目使用

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

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

 ②找到.sct文件进行修改。原本编译器生成的仅仅只有RW_IRAM1,先增加第二块CCM内存RW_IRAM2,并将不包含外设访问的相关变量的.o文件填入下方,即可将该.c文件下的变量定义入CCM内存中。

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x0800C000 0x00080000  {    ; load region size_region
  ER_IROM1 0x0800C000 0x00080000  {  ; load address = execution address
   *.o (RESET, +First)
   *(InRoot$$Sections)
   .ANY (+RO)
  }
  RW_IRAM1 0x20000000 0x00020000  {  ; RW data
   .ANY (+RW +ZI)
  }
	RW_IRAM2 0x10000000 0x00010000  {
    gui_array_page.o (+RW +ZI)
	ff.o (+RW +ZI)
	gt5668.o (+RW +ZI)
	sys_fun.o (+RW +ZI)
	sys_fun1.o (+RW +ZI)
	w25qxx.o (+RW +ZI)
	sdio_sdcard.o (+RW +ZI)
	xmode_set2dlg.o (+RW +ZI)
	gui_selfcheck_page.o (+RW +ZI)
	synwoda.o (+RW +ZI)
	xratong.o (+RW +ZI)
	tianbd.o (+RW +ZI)
	sungo.o (+RW +ZI)
	murata.o (+RW +ZI)
	vision.o (+RW +ZI)
  }
}

 ③查看.map文件进行核对是否添加成功,如图显示,已成功。

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

 感谢前辈的帖子!!!

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

Logo

开源、云原生的融合云平台

更多推荐