OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4111|回复: 2

TFTLCD 显示问题还是设置问题!

[复制链接]

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-1-9
在线时间
8 小时
发表于 2022-5-13 18:57:08 | 显示全部楼层 |阅读模式
本帖最后由 wangxianzhao 于 2022-5-14 10:53 编辑

开发板:STM32F4探索者 + 4.3' TFTLCD 显示屏  问题描述:
    1.   利用17章实验《RCT实时时钟实验》下载验证,结果显示:OK。   (利用15章实验《TFT显示实验》同样遇到本文所述的问题)
    2.   主程序结构不变,只在主程序上增加了一些画线、填充、计数显示,结果显示变得一片空白,但主程序依然在运行(DS0正常闪动)。
          如果将计数、计数显示删除,显示就回归正常。(这就有点摸不着头脑了啊,分时这个与哪个不相关啊)
    3.   在 “读LCD数据” 函数中间插入一段5us延时,结果能显示(试过2us依然不行),但是重启开发板后,计数器和秒钟只能走几秒钟(怪异的是每次重启计数器和秒钟所走的数值不同)显示屏就会停止更新,但是主程序依然在运行(DS0闪动),可以进入仿真、查看数据、打断运行等操作。
        //读LCD数据
        //返回值:读到的值
         u16 LCD_RD_DATA(void)
         {
        vu16 ram;                //防止被优化
        delay_us(5);        //这一段是插入的延时5us,
        ram=LCD->LCD_RAM;        
        return ram;         
         }                        

    从上述看来感觉是CPU正常运行、TFTLCD显示屏死机了一样。
    猜想是不是TFTLCD的操作速度不能太快,
      于是将ILI93xx.c ——void LCD_Init(void)——
            FSMC_Bank1E->BWTR[6]|=3<<0;     将这个3改成4、5、…… 10,都无效!
            FSMC_Bank1E->BWTR[6]|=2<<8;    将这个3改成4、5、…… 10,都无效!


附:主程序。怎么也想不明白,
注销红色——时秒钟能正常显示(走动),
启用红色——显示就不能正常了。
int main(void)
{   
        
        u8 hour,min,sec,ampm;
        u8 year,month,date,week;
        u8 tbuf[40];
        u32 t=0;
//        u16 Count1=0,  test_color[400];    //新增加的数组,为了使用LCD_Color_Fill函数。
        
        u32 buf=0;
        
        Stm32_Clock_Init(336,8,2,7);   
        delay_init(168);                 
        uart_init(84,115200);                 
        usmart_dev.init(84);                  
        LED_Init();                                         
         LCD_Init();                                         
        RTC_Init();                                 
        RTC_Set_WakeUp(4,0);                 
        POINT_COLOR=RED;
        
        buf=FSMC_Bank1E->BWTR[6];     //想要TFTLCD显示屏上看一下BWTR4所设定的参数与仿真所查到的数据是否一至

//        for(Count1 = 0; Count1<400; Count1++)
//        {test_color[Count1]=RED;}         //填充数组为红色

        LCD_Clear(BLACK);
        LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");        
        LCD_ShowString(30,70,200,16,16,"RTC TEST");        
        LCD_ShowString(30,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(30,110,200,16,16,"2014/5/5");        
        
//      LCD_Color_Fill(12,12,28,28,test_color);
//        LCD_ShowNum(30,250,buf,12,24);          //运行过程中显示BWTR4,结果显示跟仿真时是一样的
        
          while(1)
        {        
//        LCD_ShowNum(30,400,t,8,24);
                t++;

                LCD_DrawLine (10,400,470,400);               
                LCD_DrawRectangle(10,10,470,790);        
                LCD_Draw_Circle (240,400,100);               
                LCD_Fill(300,730,460,760,BLUE);
         
                if((t%10)==0)         
                {
                        RTC_Get_Time(&hour,&min,&sec,&m);
                        sprintf((char*)tbuf,"Time:%02d:%02d:%02d",hour,min,sec);
                        LCD_ShowString(30,140,210,16,16,tbuf);        
                        
                        RTC_Get_Date(&year,&month,&date,&week);
                        sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",year,month,date);
                        LCD_ShowString(30,160,210,16,16,tbuf);
                        
                        sprintf((char*)tbuf,"Week:%d",week);
                        LCD_ShowString(30,180,210,16,16,tbuf);
                }
                if((t%20)==0)LED0=!LED0;        //&#195;&#191;200ms,·-×aò&#187;′&#206;LED0
                delay_ms(10);
        }        
}





正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

14

主题

821

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2070
金钱
2070
注册时间
2021-7-17
在线时间
647 小时
发表于 2022-5-14 10:21:57 | 显示全部楼层
可以debug看看哪里有问题了
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-1-9
在线时间
8 小时
 楼主| 发表于 2022-5-14 11:22:19 | 显示全部楼层
本帖最后由 wangxianzhao 于 2022-5-14 11:24 编辑

把断点设定在主程序的   while( 1 )   这一行的位置,然后每次RUN(F5)全速运行又返回到while (1) 这一行的, 这样子操作的话,能够持续运行,秒针和计数器都能正常运行。

现在的计数显示程序,大约是10多ms + 1 , 每次重启动,计数显示大约到15 ~  60 之间不等,LCD就会停止刷新,(秒钟和计数器都不刷新)感觉就好象是LCD死机了一样,但是主程序依然在正常运行,因为DS0还在不停的闪烁。而且也能重新进行到仿真状态、查看数据。

然而这样并不能看出问题所在啊,只能看到正常运行中的CPU,看不到LCD内部的问题。

从上面来看,感觉低速运行可以,全速运行就不行一样。
于是就把BWTR4——(ADDSET、DATAST这两个数都调大一点)就算是调到显示屏肉眼能看得见的刷新速度也是没用。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2016-1-9
在线时间
8 小时
 楼主| 发表于 2022-5-14 22:43:16 | 显示全部楼层
本帖最后由 wangxianzhao 于 2022-5-14 23:03 编辑

问题已经解决!
只要将 u16 Count1=0,  test_color[400];  及其相关的程序段单独写一函数,并在主程序中调用这个函数即可。
另外,试着将FSMC_Bank1E->BWTR[6]|=3<<0;  改为FSMC_Bank1E->BWTR[6]|=2<<0;         也一样能正常显示,这样LCD刷新速度又可以快一点点呢       
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-25 18:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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