key=KEY_Scan();
while(font_init()||key==3)
{
UPD:
LCD_Clear(WHITE);
POINT_COLOR=RED;
LCD_ShowString(60,50,"MiNi STM32");
while(SD_Initialize())
{
LCD_ShowString(60,70,"SD Card Failed!");
delay_ms(200);
LCD_Fill(60,70,200+20,70+16,WHITE);
delay_ms(200);
}
LCD_ShowString(60,70,"SD Card OK");
LCD_ShowString(60,90,"Font Updating...");
key=update_font(20,120,16,0); //从SD卡更新
while(key)//更新失败
{
LCD_ShowString(60,110,"Font Update Failed!");
delay_ms(200);
LCD_Fill(20,110,220,126,WHITE);
delay_ms(200);
}
LCD_ShowString(60,110,"Font Update Success!");
delay_ms(1500);
LCD_Clear(WHITE);
}
本人新手,把原子哥的mini版和战舰版汉字实验综合修改后的程序下载到自己板子上,程序可以正常运行。 自己新建后的工程,再各种复制,粘贴。发现程序始终一直在更新字库
调试看到:原来是while(font_init()||key==3){} 这里font_init()返回的值一直是1.进去后
u8 font_init(void){
SPI_Flash_Init();
FONTINFOADDR=0*1024; //W25Q16,从零开始
ftinfo.ugbkaddr=FONTINFOADDR+25; //UNICODEGBK 表存放首地址固定地址
SPI_Flash_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据
if(ftinfo.fontok!=0XAA)return 1; //字库错误.
return 0;
}
在 SPI_Flash_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));没有到这一步前,ftinfo里的各值如图
也就是说,字库更新完毕了。。。
但是进行SPI_Flash_Read后,所有的值变为FF,所以if(ftinfo.fontok!=0XAA)return 1;是成立的。程序进入死循环
第一个附件是自己新建的不能运行的程序,第二个附件是修改的可以运行的(这两个几乎是一模一样啊。。。。) ,实在调不出来,特来求助。
|