OpenEdv-开源电子网

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

急!!!在F407标准库的汉字显示实验中,更换字库的起始地址后不能显示了

[复制链接]

2

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2022-7-14
在线时间
12 小时
发表于 2023-11-23 18:01:54 | 显示全部楼层 |阅读模式
1金钱
无标题.png
//字库区域占用的总扇区数大小(3个字库+unigbk表+字库信息=3238700字节,约占791个W25QXX扇区)
#define FONTSECSIZE                 791
//字库存放起始地址
#define FONTINFOADDR         1024*1024*8 //1024*1024*12                                         //Explorer STM32F4是从12M地址以后开始存放字库
                                                                                                                //前面12M被fatfs占用了.
                                                                                                                //12M以后紧跟3个字库+UNIGBK.BIN,总大小3.09M,被字库占用了,不能动!
                                                                                                                //15.10M以后,用户可以自由使用.建议用最后的100K字节比较好.

如图我改变从8M地址开始存放字库,实际运行时一直在不断重复的更新。我通过调试发现每次初始化时
根据函数:u8 font_init(void)
{               
        u8 t=0;
        W25QXX_Init();  
        while(t<10)//连续读取10次,都是错误,说明确实是有问题,得更新字库了
        {
                t++;
                W25QXX_Read((u8*)&ftinfo,FONTINFOADDR,sizeof(ftinfo));//读出ftinfo结构体数据
                if(ftinfo.fontok==0XAA)break;
                delay_ms(20);
        }
        if(ftinfo.fontok!=0XAA)return 1;
        return 0;                    
}
会将SPIflash上读出数据保存到ftinfo上,但是调试发现结构体成员的值都是0xff和0xffff。导致不停的更新。所以我又怀疑是不是w25q128本身写不进数据,我又试了一下SPI实验的例程,把地址改到存字库的位置,发现读写数据都对。我又试着把地址改到12M,又全部正常了。搞不清楚是怎么回事了,更新字库明明就调用了W25QXX里的API,为什么会不行呢?试着多改了几个地址发现都不行。又觉得跟文件系统那部分没关系,毕竟是直接操作的W25QXX的API,大不了直接覆盖文件系统管理的部分。我也试着改了一下文件系统管理SPIFlash的大小,这一部分如下:
//////////////////////////////////////////////////////////////////////////////////          


#define SD_CARD         0  //SD卡,卷标为0
#define EX_FLASH 1        //外部flash,卷标为1

#define FLASH_SECTOR_SIZE         512                          
//对于W25Q128
//前10M字节给fatfs用,10M字节后,用于存放字库,字库占用3.09M.        14M字节以后,给客户自己用                                     
u16           FLASH_SECTOR_COUNT=2048*12;        //W25Q1218,前10M字节给FATFS占用
#define FLASH_BLOCK_SIZE           8             //每个BLOCK有8个扇区


#endif          
                if(tot_sect<2048*12)//总容量小于10M
                {
                    /* Print free space in unit of KB (assuming 512 bytes/sector) */
                    printf("\r\n磁盘总容量:%d KB\r\n"
                           "可用空间:%d KB\r\n",
                           tot_sect>>1,fre_sect>>1);
                }else
                {
                    /* Print free space in unit of KB (assuming 512 bytes/sector) */
                    printf("\r\n磁盘总容量:%d MB\r\n"
                           "可用空间:%d MB\r\n",
                           tot_sect>>11,fre_sect>>11);
                }
        }

都不管用,看正点原子库函数指南也没找到原因!想了一下午挺自闭的!!!
到底是我疏忽了什么啊!!!
寻求各位大佬帮助!!!!
                                                                                                               

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

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2023-11-24 09:38:54 | 显示全部楼层
改了要重新更新字库            你这等于通知所有人你家门牌号变了,可以你却没搬家
回复

使用道具 举报

2

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2022-7-14
在线时间
12 小时
 楼主| 发表于 2023-11-25 00:06:47 | 显示全部楼层
nashui_sx 发表于 2023-11-24 09:38
改了要重新更新字库            你这等于通知所有人你家门牌号变了,可以你却没搬家

确实主函数有执行更新的函数呀,更新一遍后初始化却又找不到字库了。因为字库的起始位置的第一个字节应该设置为0xAA,但调试却为0xFF。所以一直循环更新
回复

使用道具 举报

51

主题

2165

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
10652
金钱
10652
注册时间
2017-4-14
在线时间
2780 小时
发表于 2023-11-27 13:18:55 | 显示全部楼层
sojdnqdkj 发表于 2023-11-25 00:06
确实主函数有执行更新的函数呀,更新一遍后初始化却又找不到字库了。因为字库的起始位置的第一个字节应该 ...

那就是你更新的不对,改好地址重新更新
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 03:01

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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