
Stm32H7XX GCC下分散加载实现 STM32H750XBHT这块单片机,里面有五块内存区: TCM 区 速度: 400MHz。 DTCM 地址: 0x2000 0000, 大小 128KB。 ITCM 地址: 0x0000 0000, 大小 64KB。 AXI SRAM 区 位于 D1 域, 数据带宽是 64bit, 挂在 AXI 总线上。 除了 D3 域中的 BDMB 主控不能访问,其它都可以访问此 RAM 区。 速度: 200MHz。 地址: 0x2400 0000, 大小 512KB。 用途:用途不限,可以用于用户应用数据存储或者 LCD 显存。 SRAM1, SRAM2 和 SRAM3 区,这三块都位于D2区 位于 D2 域, 数据带宽是 32bit, 挂在 AHB 总线上。 除了 D3 域中的 BDMB 主控不能访问这三块 SRAM,其它都可以访问这几个 RAM 区。 速度: 200MHz。 SRAM1: 地址 0x3000 0000, 大小 128KB, 用途不限,可用于 D2 域中的 DMA 缓冲, 也可以当D1 域断电后用于运行程序代码。 SRAM2:地址 0x3002 0000, 大小 128KB, 用途不限,可用于 D2 域中的 DMA 缓冲,也可以用于用户数据存取。 SRAM3:地址 0x3004 0000, 大小 32KB, 用途不限, 主要用于以太网和 USB 的缓冲。 SRAM4 区 位于 D3 域, 数据带宽是 32bit,挂在 AHB 总线上,大部分主控都能访这块 SRAM 区。 速度: 200MHz。 地址: 0x3800 0000, 大小 64KB。 用途:用途不限,可以用于 D3 域中的 DMA 缓冲,也可以当 D1 和 D2 域进入 DStandby 待机方式后, 继续保存用户数据。 Backup SRAM 区 备份 RAM 区, 位于 D3 域, 数据带宽是 32bit,挂在 AHB 总线上,大部分主控都能 访问这块 SRAM区。 速度: 200MHz。 地址: 0x3880 0000, 大小 4KB。 用途:用途不限, 主要用于系统进入低功耗模式后, 继续保存数据(Vbat 引脚外接电池)。 既然有这么多快内存区域,那么我们在使用gnu环境下应该怎么使用各块区域的内存呢? 这里就要使用“分散加载法”。 打开STM32H7的链接脚本:
链接脚本中已经给我们定义好了各个内存区块,可以看到跟我们前面介绍的是一样的。 那么怎么使用呢? 先抛出一个问题,我们之前在写stm32代码的时候,定义的全局变量会保存在哪里? 答案是全局区,那这个全局区到底在哪? 链接脚本会告诉我们:
可以看到我们定义的全局变量会保存在RAM_D1区域。 所以我们要将这些内存区域定义成相关的sectin。加到ld文件中 写法如下:
加好之后,我们就可以指定全局变量定义在哪一块ram中了。
可以打印一下该数组的地址,位于DTCMRAM 区。定义到其他几个区也是一样的写法。 所谓分散加载法,其实就是用Ld文件指定数据到目标存储区域。 ———————————————— 版权声明:tony++ |
NUCLEO-H723ZG开发板试用 ——串口点灯测试
经验分享 | STM32H7 EXTI + SPI +DMA 双缓冲应用演示
【经验分享】STM32H7时钟
拷打cubemx【003】——找不到的芯片包
【2025·STM32峰会】GUI解决方案实训分享5-调通板载的NRF24L01 SPI接口并使用模块进行无线通信(发送和接收)
【2025·STM32峰会】GUI解决方案实训分享4-使用MVP架构从硬件外设读取数据并显示到图形界面、从图形界面发送指令控制硬件外设
【2025·STM32峰会】GUI解决方案实训分享3-搭建空白TouchGFX例程并实现简单的功能(含硬件部分的串口打印)
【2025·STM32峰会】GUI解决方案实训分享2-编译运行TouchGFX咖啡机例程(含桌面仿真)
【2025·STM32峰会】+TouchGFX实现动态进度显示以及界面切换
【2025·STM32峰会】+使用TouchGFX快速创建GUI
不错,正好需要这个