Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ TFT LTDC显示器-像素未写入正确位置_C++_User Interface_Embedded_Stm32_Display - Fatal编程技术网

C++ TFT LTDC显示器-像素未写入正确位置

C++ TFT LTDC显示器-像素未写入正确位置,c++,user-interface,embedded,stm32,display,C++,User Interface,Embedded,Stm32,Display,因此,我一直在使用定制的alientek板将LVGL移植到STM32H743II,但一直面临与像素放置相关的问题。以前,我能够缩小区域并使LVGL显示正确,但任何将其放大到屏幕全宽(1024x600)的尝试都会导致所有内容变得混乱且无法读取 起初,我认为这是因为我没有正确设置HBP、VBP等值,但在这里找到屏幕的正确值,并使用相同的公式设置活动宽度/高度(包括在一些演示代码中)来更新所有值后,我仍然得到一个相当混乱的显示 我面临的问题的一个很好的例子可以在下图中看到, 这是我用来实际定义屏幕值

因此,我一直在使用定制的alientek板将LVGL移植到STM32H743II,但一直面临与像素放置相关的问题。以前,我能够缩小区域并使LVGL显示正确,但任何将其放大到屏幕全宽(1024x600)的尝试都会导致所有内容变得混乱且无法读取

起初,我认为这是因为我没有正确设置HBP、VBP等值,但在这里找到屏幕的正确值,并使用相同的公式设置活动宽度/高度(包括在一些演示代码中)来更新所有值后,我仍然得到一个相当混乱的显示

我面临的问题的一个很好的例子可以在下图中看到,

这是我用来实际定义屏幕值的代码,这些值是根据这个特定屏幕的规范来定义的

void PutPixel(uint16_t x, uint16_t y, uint32_t color)
 {
    *((uint32_t *) (Bank5_SDRAM_ADDR + (x * PIXELWIDHT) + (y * (LCD_WIDTH * PIXELWIDHT)))) = color;
 }
这就是我用来将值写入SDRAM的函数

如果有人能够澄清为什么这不起作用,这将是一个很大的帮助,因为我已经面临这个问题不是几个星期了,它让我发疯

编辑:为了回应下面的评论,我更新了循环使用LCD_宽度,这使它看起来更干净,但它仍然溢出和抖动

编辑2:
因此,经过一点修改,我能够解决最初的闪烁问题,现在我所有的配置值都应该是正确的。我仍然面临奇怪的溢出错误,因为用户yeputons似乎正确地认为某些内存地址正在被覆盖。

在初始循环中,您运行
j
ACTIVE\u W
像素,但
PutPixel
代码假设扫描线宽度为
LCD\u width
像素。这让我觉得其中一个或两个都是错误的。很好,我刚刚更新使用LCD_宽度,它看起来更干净,但我仍然看到相同的问题。请参阅我更新的帖子。
VFP
不应该是
12
?我正在看你链接的页面上的以下公式:
(VSPW+VBP+LINE+VFP)*(HSPW+HBP+HOZVAL+HFP)=(3+20+600+12)*(20+140+1024+160)
另外,我对你的
活动的
-1
/
活动的
/
总宽度
/
总高度
/code>。这可能是最后一行/列的从零开始的索引,但我怀疑这是实际的行/列数,这是索引所需的。啊,实际上您使用的是段而不是半个间隔,因此您的
活动\u W
应该是最后一个索引。很少看到这种情况。下一个想法:实际上你应该乘以<代码> ToeSuthField+1 (请考虑把名字改成“代码> LastIdSt++/<代码>”,而不是按<代码> LCDWixWiels。此外,您应该相应地偏移所有坐标。否则,循环中的一些
PutPixel
调用显然会修改相同的内存,这很奇怪。
#define LCD_WIDTH       1024
#define LCD_HEIGHT      600

#define HFP     160
#define HSYNC   20
#define HBP     140

#define VFP     120
#define VSYNC   3
#define VBP     20
//=================================================================================================
// Areas computation
//=================================================================================================
#define ACTIVE_W (HSYNC + LCD_WIDTH + HBP - 1)
#define ACTIVE_H (VSYNC + LCD_HEIGHT + VBP - 1)

#define TOTAL_WIDTH  (HSYNC + HBP + LCD_WIDTH + HFP - 1)
#define TOTAL_HEIGHT (VSYNC + VBP + LCD_HEIGHT + VFP - 1)
/* Pixel width in bytes */
#define PIXELWIDHT 4
void PutPixel(uint16_t x, uint16_t y, uint32_t color)
 {
    *((uint32_t *) (Bank5_SDRAM_ADDR + (x * PIXELWIDHT) + (y * (LCD_WIDTH * PIXELWIDHT)))) = color;
 }