本帖最后由 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;        //ÿ200ms,·-×aò»′ÎLED0  
                delay_ms(10); 
        }         
} 
 
 
 
 
 
 |