最近学到LCD了,但是在将野火的代码转移到CubeMX时却遇到了大麻烦,屏幕一直是花的,只有一次正常显示一下下,但是过一段时间就又没了,好几天的时间都找不到问题。
说说如何找到问题的
找到问题的方法是我昨天才想到的,前些天就像无头苍蝇一样到处乱窜,花了很多时间,但是没有用对方法,都是无用功。
后来想到,LCD使用SDRAM最为显存,那么只需要读取SDRAM中的数据就知道为什么显示会有问题了。
通过访问SDRAM中的显存的地址,就可以直接得到SDRAM中的数据。
首先测试清屏函数,读取SDRAM中的数据在清屏前和清屏后的数据有什么不同。
1 printf("%s\n","-----D000 after clear-----");
2 uint32_t i;
3 uint8_t ubReaddata_8b=0;
4 for (i=0; i<200; i++) {
5 ubReaddata_8b = *(__IO uint8_t*)(0xD0000000 + i);
6 printf("%x ",ubReaddata_8b);
7 }
8
9 printf("\n%s\n","-----D000 after clear-----");
10
11 printf("%s\n","-----D020 after clear-----");
12
13 for (i=0; i<200; i++) {
14 ubReaddata_8b&nb

本文总结了作者在将LCD代码从野火移植到CubeMX时遇到的显示问题及其解决过程,主要涉及LTDC、DMA2D和FMC等外设。通过分析SDRAM中的数据,发现问题出在LL_FillBuffer函数,修改Dma2d_Handler为hdma2d后程序恢复正常。此外,简要介绍了LCD所用到的外设功能:LTDC负责液晶控制器,DMA2D用于图像搬运和格式转换,FMC则用于操作SDRAM。
最低0.47元/天 解锁文章
1532

被折叠的 条评论
为什么被折叠?



