簡體   English   中英

STM32F429-DISC1 LCD 打印雙像素

[英]STM32F429-DISC1 LCD prints double pixels

我試圖通過在 ARGB4444 配置中直接寫入 SDRAM 來在STM32F429-DISC1的 LCD 上打印像素。

stm32f429i_discovery_lcd.c文件中,我更改了以下行:

LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_RGB565

為了

LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB4444;

在我的主要我調用以下初始化程序:

LCD_Init();
LCD_LayerInit();
LTDC_Cmd(ENABLE);

最后我嘗試red the 60500th pixel on Layer 1打印red the 60500th pixel on Layer 1 我乘以 2,因為地址是 32 位。

*(uint32_t *) (SDRAM_BANK_ADDR + 60500 * 2) = 0xFF00;

作為旁注:

uint32_t SDRAM_BANK_ADDR = 0xD0000000 //Beginning of Layer 1

紅色像素被打印出來,但除此之外還有一個黑色像素。 這是一張圖片: 正確的紅色像素 + 錯誤的像素

怎么了?

謝謝

這:

LTDC_Layer_InitStruct.LTDC_PixelFormat = LTDC_Pixelformat_ARGB4444;

似乎暗示像素是 16 位。 由於這是在微控制器上,我假設要打包的幀緩沖區,即每像素 16 位。

但是這個:

*(uint32_t *) (SDRAM_BANK_ADDR + 60500 * 2) = 0xFF00;

寫入 32 位,即它也會破壞相鄰像素。 請注意,上面在計算時不會強制轉換實際地址,這是通過在右括號內完成的。 進行計算的確切類型取決於SDRAM_BANK_ADDR的類型,即uint32_t 然后需要在寫入之前將該整數值轉換為指向像素的指針,這是通過向左轉換來完成的。

修復方法很簡單:

*(uint16_t *) (SDRAM_BANK_ADDR + 60500 * 2) = 0xFF00;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM