硬汉嵌入式论坛

 找回密码
 立即注册
查看: 751|回复: 16
收起左侧

[LTDC] 偶发性开机LCD黑屏无显示

[复制链接]

44

主题

564

回帖

701

积分

金牌会员

积分
701
发表于 2023-12-6 14:07:31 | 显示全部楼层 |阅读模式
遇到一个问题,偶发性开机LCD屏幕无显示,黑屏的。但是软件调试和运行都是正常的。不知道啥问题?

整个系统中有GUI任务,一旦有开机黑屏的情况程序都能跑运行,就是一直不显示黑屏的。程序初始化的阶段LCD完成初始化后会显示开机logo画面,一旦遇到黑屏情况,开机logo都不显示,感觉像是LCD初始化有关,但是不知道哪引起的问题,LCD驱动用的是V7板软件代码。


int main(void)
{
  /* USER CODE BEGIN 1 */
  SCB->VTOR = QSPI_BASE;

  MPU_Config();

  /* USER CODE END 1 */

  /* Enable I-Cache---------------------------------------------------------*/
  SCB_EnableICache();

  /* Enable D-Cache---------------------------------------------------------*/
  SCB_EnableDCache();

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  MX_GPIO_Init();
  MX_FATFS_Init();
  
  MX_FMC_Init();

  LCD_InitHard();
  HAL_Delay(50);               

  LCD_DrawBMP(0, 0, 272, 480,_aclogo);              //黑屏时这图片都不显示,正常运行图片会显示大概10S后进入GUI任务显示。

  MX_DMA_Init();
  MX_SPI1_Init();

  osKernelInitialize(); /* Call init function for freertos objects (in freertos.c) */
  
  MX_FREERTOS_Init();

  osKernelStart();

}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2023-12-6 15:13:01 | 显示全部楼层
已经排查了LCD的硬件问题了吧。

另外外设和LCD的初始化都放到OS的任务里面去做。
回复

使用道具 举报

44

主题

564

回帖

701

积分

金牌会员

积分
701
 楼主| 发表于 2023-12-6 15:18:15 | 显示全部楼层
eric2013 发表于 2023-12-6 15:13
已经排查了LCD的硬件问题了吧。

另外外设和LCD的初始化都放到OS的任务里面去做。

硬件基本排查完没有发现问题,分析应该软件问题,还在找
回复

使用道具 举报

44

主题

564

回帖

701

积分

金牌会员

积分
701
 楼主| 发表于 2023-12-6 16:20:57 | 显示全部楼层
eric2013 发表于 2023-12-6 15:13
已经排查了LCD的硬件问题了吧。

另外外设和LCD的初始化都放到OS的任务里面去做。

发现一个问题,TFT时钟频率过高了,代码没有屏蔽多余的部分。手册规格是9MHz,实际输出了24MHz。有没有可能是这个导致,已经修改为9MHz时钟频率测试。
1206.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2023-12-7 08:20:58 | 显示全部楼层
ou513 发表于 2023-12-6 16:20
发现一个问题,TFT时钟频率过高了,代码没有屏蔽多余的部分。手册规格是9MHz,实际输出了24MHz。有没有可 ...

这个地方确实超的比较多,典型值9MHz,可以排查下。
回复

使用道具 举报

44

主题

564

回帖

701

积分

金牌会员

积分
701
 楼主| 发表于 2023-12-13 10:36:33 | 显示全部楼层
eric2013 发表于 2023-12-7 08:20
这个地方确实超的比较多,典型值9MHz,可以排查下。

经过测试和排查发现不是这个问题,因为这个非常难预见的偶然性,经过调试捕捉到一个问题,LCD在初始化的时候就发生了LTDC 的传输错误中断和 FIFO 下溢中断,研学了V7手册提到过这个问题,但是具体还是不知道什么解决。
LCD_FU.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2023-12-13 13:53:39 | 显示全部楼层
ou513 发表于 2023-12-13 10:36
经过测试和排查发现不是这个问题,因为这个非常难预见的偶然性,经过调试捕捉到一个问题,LCD在初始化的 ...

有一个地方会出这种问题,就是上电瞬间是否有电源不稳的情况。
回复

使用道具 举报

44

主题

564

回帖

701

积分

金牌会员

积分
701
 楼主| 发表于 2023-12-13 16:11:01 | 显示全部楼层
eric2013 发表于 2023-12-13 13:53
有一个地方会出这种问题,就是上电瞬间是否有电源不稳的情况。

关于上电电源稳定性暂时不太好查,但是调试的时候是没有断电的,直接就是MDK里debug模式下reset,从一点来说电源影响好像也说不过去。
尝试把这两个中断关了,测试好像是可以的,就是不知道关闭这两个中断会不会到来其他问题,
        __HAL_LTDC_DISABLE_IT(&hltdc_F, LTDC_IT_TE);
        __HAL_LTDC_CLEAR_FLAG(&hltdc_F, LTDC_FLAG_TE);
        __HAL_LTDC_DISABLE_IT(&hltdc_F, LTDC_IT_FU);
       __HAL_LTDC_CLEAR_FLAG(&hltdc_F, LTDC_FLAG_FU);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2023-12-14 08:07:53 | 显示全部楼层
ou513 发表于 2023-12-13 16:11
关于上电电源稳定性暂时不太好查,但是调试的时候是没有断电的,直接就是MDK里debug模式下reset,从一点 ...

如果没有用到基于垂直消隐的多缓冲机制,关闭即可。
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 7 天前 | 显示全部楼层
我现在也是碰到了这样的问题,我怀疑根本原因还是SDRAM作为显存造成的问题,否则LTDC怎么会出现传输错误和FIFO下溢中断。
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 6 天前 | 显示全部楼层
代码检查了好几天了,还是不行,偶尔开机就出现黑屏问题,我的程序是分2部分,有BOOT程序,开机显示都没有问题,可是进入系统程序后,只要LTDC初始化后,使用clear清屏函数,只要是不成功,后面就一直显示蓝屏,其他功能都正常。系统程序里面使用了LVGL+UCOSIII,boot程序是裸奔的。我同样的代码在GD32F470zgt6和STM32H723ZGT6上面运行都没有问题。对了,H723ZGT6开始时也是偶尔会出现这种情况,后来我初始化SDRAM后,把整个SDRAM都读写测试一遍后,就程序正常了,每次都可以正常显示,就是偶尔使用JLINK烧录程序的时候第一次显示蓝屏,后面断电重启都不会再出问题,我认为应该是SDRAM开始没有做好读写准备造成的,但是现在H743IIT6不管怎么初始化和读写测试SDRAM和LTDC都会出现蓝屏不显示,现在基本上开机10次,有6-7次不成功,只能成功少数几次。我这两天实在是想不到还有什么问题了,SDRAM的那些配置参数反复都修改过了,没什么作用。LTDC和DMA2D的层也设置了,只打开1层,关闭第2层,都不行,请哪位处理过这个问题的大佬帮忙提示一下。小弟谢谢了。
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 6 天前 | 显示全部楼层
对了,楼上提示的关闭LTDC的TE(传输错误中断)和FU(FIFO下溢中断)我都关闭测试了,没有作用,还是偶尔蓝屏。而且就算是蓝屏,其他功能完全正常,很奇怪。我想把开机的视频发上来,不知道怎么发。
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 6 天前 | 显示全部楼层
今天下午用JLINK打断点看了刷屏后的SDRAM的显存数据,没有问题,所以应该SDRAM和DMA2D这2个地方都应该没问题了。那么剩下的就还是LTDC的问题了。有哪位大佬能给点提示吗?
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 6 天前 | 显示全部楼层
d:/aaa.png
回复

使用道具 举报

1

主题

20

回帖

23

积分

新手上路

积分
23
发表于 6 天前 来自手机 | 显示全部楼层
大家好,进一步测试,发现了每次LTDC的ISR寄存器只要是=0,就一切正常,有问题的时候=2,查手册发现是中断状态寄存器,2代表发生了FU中断,就是FIFO下溢中断。不知道为什么会发生这个中断。
回复

使用道具 举报

44

主题

564

回帖

701

积分

金牌会员

积分
701
 楼主| 发表于 5 天前 | 显示全部楼层
shnd 发表于 2024-5-12 22:45
大家好,进一步测试,发现了每次LTDC的ISR寄存器只要是=0,就一切正常,有问题的时候=2,查手册发现是中断 ...

哦,最后我的问题发现BootLoader中LCD的clk频率设置高了超过了屏的参数,最后是把LCD的 clk都设置为10M就正常了
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 5 天前 | 显示全部楼层
shnd 发表于 2024-5-12 22:45
大家好,进一步测试,发现了每次LTDC的ISR寄存器只要是=0,就一切正常,有问题的时候=2,查手册发现是中断 ...

这样的话,估计是LTDC,DMA2D和CPU都抢占操作SDRAM,出现问题了。可以适当境地下速度试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-18 07:29 , Processed in 0.215383 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表