本帖最后由 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);
}
}
|