5. 外部RAM中的帧缓冲
动机
在这一步,我们将帧缓存从内部RAM移至外部RAM,并确保帧缓存内容仍可以传输到显示屏。
Note
如果所用开发板不外扩RAM,请跳过此步。
由于显示控制器对传输速度有一定要求,因此该步骤将基于外部RAM进行压力测试。 该过程中可能发生错误。 常见错误为外部RAM的带宽不够高所造成的LTDC下溢,或RAM配置不正确和“超规格”运行而导致的图像错误。
目标
此步骤把使用内部RAM作为帧缓存,改为使用外部RAM做帧缓存。
验证
以下是这部分的验证点。 这些验证点与帧缓存位于内部RAM中时的验证点相似,但应再次检查,因为外部存储器的访问速度可能会影响从帧缓存向显示屏的传输。
验证点 | 基本原理 |
---|---|
显示帧缓存 | 显示控制器或SPI已配置并正在运行 |
显示更新的帧缓存 | 我们知道如何重复发送帧缓存数据 |
帧率正确 | 配置像素时钟和同步沿,以获得所需帧率 |
先决条件
以下是此步骤的先决条件:
- 外部RAM中帧缓存地址
执行
我们有两个任务:
- 将帧缓存放在外部RAM
- 设置显示控制器,以从外部RAM读取数据
当帧缓存位于外部RAM中时,通常的做法不为其分配数组。 只需声明一个指向正确地址的指针即可。 然后手动选择外部RAM地址。 该地址可位于外部RAM中的任何位置,但通常位于RAM的开头:
main.c
uint16_t* framebuffer = (uint16_t*)0xC0000000; //16 bpp framebuffer
您可以重用在内部RAM显示步骤中创建的小型测试程序。
LTDC层配置
请记住更改LTDC图层的配置。 由于我们现在有了帧缓存的特定地址,我们可以通过CubeMx将该地址进行设置(即帧缓存起始地址):
请记住从你的程序中删除此行和帧缓存数组:
main.c
/* USER CODE BEGIN 2 */
HAL_LTDC_SetAddress(&hltdc, framebuffer, LTDC_LAYER_1);
/* USER CODE END 2 */
如果在步骤03将LTDC图层大小设置为仅更新部分显示(由于内部RAM的数量) ,则现在需要重做。 重新配置LTDC图层参数,以便支持整个显示屏。