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圖層參數,以便支援整個顯示器。