使用LVGLpack移植到STM32发生的显示异常

在KEIL环境中通过LVGLpack移植到STM32H750 RTX5工程
测试一个普通的容器控件时没有问题的

当我用单缓冲显示一个开关控件时,它改变状态就会发生显示错误


而当采取全屏幕的双缓冲时,其改变状态后就会“消失”。

static void disp_flush(lv_display_t * disp_drv, const lv_area_t * area, uint8_t * px_map)
{

		int32_t x;
    int32_t y;
	
	x = area->x2 - area->x1 +1;  
	y = area->y2 - area->y1 +1;
	int32_t width = area->x2 - area->x1 + 1;
	int32_t height = area->y2 - area->y1 + 1;
	uint32_t line_offset = (MY_DISP_HOR_RES - width); // Display stride adjustment
	uint32_t addr = (0xD0000000 + (MY_DISP_HOR_RES*area->y1 + area->x1)*2);
	_DMA2D_Copy((uint32_t*)px_map, 
 (void *)addr, 
 x, 
 y, 
 0, 
 line_offset) ;
    lv_display_flush_ready(disp_drv);
}

void _DMA2D_Copy(void * pSrc, 
 void * pDst, 
 uint32_t xSize, 
 uint32_t ySize, 
 uint32_t OffLineSrc, 
 uint32_t OffLineDst) 
 {

	uint32_t bufferSize = xSize * ySize * 2; // RGB565=2字节/像素 
  // 清理CPU缓存确保数据写入物理内存
  SCB_CleanDCache_by_Addr(pSrc, bufferSize);	
	 
 /* DMA2D 采用存储器到存储器模式, 这种模式是前景层作为 DMA2D 输入 */ 
 DMA2D->CR = 0x00000000UL | (1 << 9);
 DMA2D->FGMAR = (uint32_t)pSrc;
 DMA2D->OMAR = (uint32_t)pDst;
 DMA2D->FGOR = OffLineSrc;
 DMA2D->OOR = OffLineDst;

 /* 前景层和输出区域都采用的 RGB565 颜色格式 */
 DMA2D->FGPFCCR = LTDC_PIXEL_FORMAT_RGB565;
 DMA2D->OPFCCR = LTDC_PIXEL_FORMAT_RGB565;

 DMA2D->NLR = (uint32_t)(xSize << 16) | (uint16_t)ySize;

 // 启动传输前使D-Cache失效
 SCB_InvalidateDCache_by_Addr(pDst, bufferSize);	 
	 
 /* 启动传输 */
 DMA2D->CR |= DMA2D_CR_START; 

 /* 等待 DMA2D 传输完成 */
 while (DMA2D->CR & DMA2D_CR_START) {}
 }