STM32H750 480MHZ频率 RAM分配处理 KEIL工程

各位看官都知道 STM32H750超值系列提供128 KB的Flash存储器,具有以下结构的1 MB SRAM:192 KB的TCM RAM(包括64 KB的ITCM RAM和128 KB的DTCM RAM,用于时间关键型程序和数据),高达512 KB的用户SRAM,以及备份域中4 KB的SRAM,其实对于大多数工业控制实际情况,这种配置足可以了,一个实时操作系统+实际控制程序超过128KB的代码都算比较大的系统了,RAM也有128KB的DTCM空间,都足可以了,可以非常舒服的利用480MHZ的主频了,当然这也是应用于我当前着眼的一些项目,看了H750的RAM分配情况,分了2个区域,如下图:
在这里插入图片描述
512 KB的用户SRAM,即上面IRAM2区域,地址:0x2400 0000,大小 0X8000(512KB),发现IRAM2区域位于 D1 域,数据带宽是 64bit,挂在 AXI 总线上。除了 D3 域中的 BDMB 主控不能访问,其它都可以访问此 RAM 区。但是速度只有200MHz。而IRAM1区域为地址:0x2000 0000,大小0X2000 (128KB),为DTCM,速度可以达到480MHz,即和内核同频率,这个区域真是爽歪歪,但是DMA1和DMA2却无法访问这些区域,这个时候我们需要将DMA1和DMA2访问的数据定义的IRAM2区域,将其他的变量定义定义到IRAM1区域,这样就能使系统的性能最大化,下面以KEIL的工程来实验变量定义到指定的RAM区域。
其他的理论,网上要很多的说明,我们不过多描述,这里只写怎么做,:)
先新建一个文件,stm32-v7.sct,这个名字可以自己定义:),内容如下:
; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************

LR_IROM1 0x08000000 0x00200000 { ; load region size_region
ER_IROM1 0x08000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
}

RW_IRAM1 0x20000000 0x00020000 { ; RW data - 128KB DTCM
.ANY (+RW +ZI)
}

RW_IRAM2 0x24000000 0x00080000 { ; RW data - 512KB AXI SRAM
*(.RAM_D1)
}

}
文件里亦这个内容就可以了:),下一步,需要定义到IRAM2区域内的变量这样定义就可以了,其他定义到IRAM1的变量按正常方式就可以啦:),在正常变量前面加这个“attribute((section (".RAM_D1"))) ”如下面的
attribute((section (".RAM_D1"))) unsigned int ADCxValues2[64];如果不加前缀“attribute((section (".RAM_D1"))) ”就会分配在IRAM1区域,否则就会分配到IRAM2区域,另外在KEIL里面还需要配置一个选项如下图
在这里插入图片描述重新编译一下,下面是编译结果演示:),定义了两个变量组,然后看分配的区域:)一个分配在0X20000000区域,一个分配在0X24000000区域。DMA传输数据必须放在0X24000000区域,否则无法操作:)
在这里插入图片描述

  • 10
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值