Mking 发表于 2023-4-20 09:40:49

STM32F407 CCRAM 使用方法

STM32F407ZET6 有192Kb的 RAM,其中64Kb是CCRAM,只供内核使用,剩下的128Kb可供所有外设使用

请教大家,我串口接收与发送定义的buff缓冲区,能否使用ccram来提供? 串口不使用DMA外设进行读写,串口接收使用中断+空闲中断,发送使用阻塞发送
如果大家有用过,能否分享一下使用方法?小弟在此感谢大家了~

caicaptain2 发表于 2023-4-20 15:34:01

本帖最后由 caicaptain2 于 2023-4-20 15:36 编辑

串口的DMA用起来很香,就算现在不用,后续优化可能也会用到DMA。 CCM不能参与DMA,所以一般给纯数据缓存用比较好, 比如RTOS的堆栈,emwin的图形缓存什么的。
使用ccm,可以直接用语法来固定变量的地址,还可以使用分散文件定义,mdk项目设置等方式来指定给变量或者c代码。

tovinz 发表于 2023-4-20 16:37:06

1. 先开启CCRAM的时钟

2.



3.


4.


当然也可以手动修改分散加载文件,上面的做法是KEIL会帮你修改分散加载文件


eric2013 发表于 2023-4-21 00:55:17

供参考。

像使用内部SRAM一样定义使用SDRAM和CCM RAM,可以随意定义到指定的RAM区域且无需具体地址
https://www.armbbs.cn/forum.php?mod=viewthread&tid=89275&fromuid=58
(出处: 硬汉嵌入式论坛)

snakeemail 发表于 2023-8-27 17:40:46

tovinz 发表于 2023-4-20 16:37
1. 先开启CCRAM的时钟

2.


CCRAM也有时钟,不是默认可以使用的吗?我x,这哪都要注意开时钟

tovinz 发表于 2023-8-28 08:39:11

snakeemail 发表于 2023-8-27 17:40
CCRAM也有时钟,不是默认可以使用的吗?我x,这哪都要注意开时钟

其实是我的一个通用的用法,因为根据硬汉老师的教程,在bootloader跳转前,会关闭所有外设的时钟,所以到APP里的时候都打开一遍

caicaptain2 发表于 2023-8-28 08:40:51

snakeemail 发表于 2023-8-27 17:40
CCRAM也有时钟,不是默认可以使用的吗?我x,这哪都要注意开时钟

ccram没有时钟选项。。。。不要被误导了。

tovinz 发表于 2023-8-28 08:59:17

caicaptain2 发表于 2023-8-28 08:40
ccram没有时钟选项。。。。不要被误导了。

我用的GD32的{:16:}

phy1335 发表于 2024-3-3 17:07:48

看看AN4296可能有用。其想法是,内核可以从CCM获取代码,同时从另一个SRAM获取数据。并行使用不同的“总线”,提供最佳性能。如果从同一内存(任一)获取代码和数据,则由于争用,速度会变慢。
http://www.st.com/resource/en/application_note/dm00083249.pdf
页: [1]
查看完整版本: STM32F407 CCRAM 使用方法