查阅ST官方资料可以得出,STM32H743VI是有1024KB的RAM空间的,但其实这空间并不连续,被划分成了若干区域:
TCM区 TCM : Tightly-Coupled Memory 紧密耦合内存 。ITCM用于运行指令,也就是程序代码,DTCM用于数据存取,特点是跟内核速度一样,而片上RAM的速度基本都达不到这个速度,所以有降频处理。 速度:400MHz。 DTCM地址:0x2000 0000,大小128KB。 ITCM地址:0x0000 0000,大小64KB。 AXI SRAM区 位于D1域,数据带宽是64bit,挂在A**线上。除了D3域中的BDMB主控不能访问,其它都可以访问此RAM区。 速度:200MHz。 地址:0x2400 0000,大小512KB。 用途:用途不限,可以用于用户应用数据存储或者LCD显存。 SRAM1,SRAM2和SRAM3区 位于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。 而KEIL程序平常默认启用的RAM分区为DTCM的192KB和AXI SRAM区的512KB,剩余的ITCM不用于数据读写,SRAM1,SRAM2和SRAM3区默认上电不会启用,SRAM4区更是一般只用在低功耗数据存储,在KEIL魔术棒配置中其实也可以看出来:
想要启用SRAM1,SRAM2和SRAM3区,网上给的方法一般是重写sct分区文件并让工程链接:
LR_IROM1 0x08000000 0x00200000 { ; load region size_region ER_IROM1 0x08000000 0x00200000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } ; RW data - 128KB DTCM RW_IRAM1 0x20000000 0x00020000 { .ANY (+RW +ZI) } ; RW data - 512KB AXI SRAM RW_IRAM2 0x24000000 0x00080000 { *(.RAM_D1) } ; RW data - 128KB SRAM1(0x30000000) + 128KB SRAM2(0x3002 0000) + 32KB SRAM3(0x30040000) RW_IRAM3 0x30000000 0x0004b000 { *(.RAM_D2) } ; RW data - 64KB SRAM4(0x38000000) RW_IRAM4 0x38000000 0x0004b000 { *(.RAM_D3) } } 在KEIL魔术棒配置中需要把默认分配首选项关掉,这样才可以链接外部sct文件:
链接成功后,以LVGL缓存buf_1_1数组为例进行分配,首先将buf_1_1数组地址强行分配至.RAM_D1区即AXI SRAM区(0x24000000地址),并使用%p打印buf_1_1数组地址:
可以看出,buf_1_1数组地址强行分配至AXI SRAM区没有任何问题,LVGL程序正常运行。然后是分配到.RAM_D2即SRAM123区:
从串口打印上看,buf_1_1数组地址强行分配至SRAM123区(0x30000000区)也是成功的,但是数组作用失效,LVGL程序已经跑不起来了:
在main函数中启用SRAM123的时钟,没有效果:
在启用.s文件中添加AHB时钟树的SRAM123时钟标志位,也是不行:
总结:编写并链接外部sct文件确实可以启用STM32H743VI的DTCM的192KB和AXI SRAM区的512KB共计704KB,但是仍然有288KB的空间没法得到利用,这个问题只能后面再研究了。 |
【福利三:逢7发帖赢大礼】使用惠勤致远STM32H743VI开发板+ST7796并口彩屏移植LVGL9.5并分享一些额外内容
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
【逢7发帖赢大礼】#5 Arduino UNO Q的led matrix
【逢7发帖赢大礼】#4 使用Arduino APP LAB 玩arduino UNO Q
【逢7发帖赢大礼】STM32开发之WIFI实时时钟
【逢7发帖赢大礼】#3 STM32U新进驻的新开发板Arduino UNO Q
【 逢7发帖赢大礼】7、TouchGFX中实现云彩流动效果
【逢7发帖赢大礼】#2 STM32F429-Discovery在 Arduino 中的使用
【 逢7发帖赢大礼】6、TouchGFX中添加图像素材和自定义代码编辑
【 逢7发帖赢大礼】5、TouchGFX 创建自定义界面和交互
微信公众号
手机版