历史上的今天
今天是:2025年02月13日(星期四)
2020年02月13日 | STM32如何实现W25X16的汉字字库存储
2020-02-13 来源:elecfans
系统中使用过多的汉字会出现芯片容量不够用的问题,可将数据存储在外部FLASH中,在需要使用时进行调用即可。本文是通过STM32串口1实现对W25X16的汉字字库存储。软件层面,配置串口1和SPI1即可,程序初始化后,在对W25X16进行写之前,必须先擦除,可以一个字节、一页、一扇区、一块以及整片擦除。写字库前,我们用整片擦除方式,如下:

整个程序中,关键在于串口接收中断函数的编写,如下:
u32 WriteAddress=0;
void USART1_IRQHandler(void)
{
u8 Res;
if(USART_GeTITStatus(USART1,USART_IT_RXNE)!=RESET)
{
USART_ClearITPendingBit(USART1,USART_IT_RXNE);
Res=USART_ReceiveData(USART1);
SPI_Flash_Write_NoCheck(&Res,WriteAddress,1);
WriteAddress++;
}
}
也就是从地址0开始,一个字节一个字节进行写入。
代码为最简单的通信代码,不过多说,然后打开串口助手,进行配置,勾选启用文件数据源,选择下载或者自己做好的字库文件;勾选按十六进制发送,在芯片完全擦除后再进行发送:

经过几十秒的等待,字库会发送完成,通过看发送的字节数与字库的字节数对比,即可知道是否发送完毕。(上图中发送字节数不是字库字节数)前面的文章有写过汉字点阵获取的方法,此处不再赘述。如此,即可通过SPI访问外部FLASH来调用汉字,并将其显示在显示屏上。同样对于asiic码可以将其写入某个块中,然后通过地址的偏移来计算对应的字符。
对于图片的存储也是相同原理,在之前实现汉字显示的基础上,笔者测试了图片的显示,而且获得正确的显示。笔者使用的显示屏为TFT1.44的,为128*128,占用32768字节,两张图片正好占用65536字节,也就是64Kb,而W25X16一个块是64Kb,进行块擦除后,每个块可以载入两张图片,非常完美。基本程序相同,只是此时因为字库的写入,不使用片擦除指令,而使用块擦除实现对未使用块区的擦除:

计算了下,字库占用了3个块多点,因此彻底避开此区+在:
可以打开看下字库文件,然后对获取的图片文件进行编辑即可。下面贴出自己编写的图片显示的代码:
void ShowImage_W25X16(u32 WriteAddr)
{
int i;
u32 j;
unsigned char picH,picL;
u8 datatemp[2];
Lcd_Clear(WHITE);
Lcd_SetRegion(0,0,127,127);
for(j=0;j《1024;j++)
for(i=0;i《16;i++)
{
SPI_Flash_Read(datatemp,WriteAddr,2);
picL=datatemp[0];
picH=datatemp[1];
WriteAddr=WriteAddr+2;
LCD_WriteData_16Bit(picH《《8|picL);
}
}
史海拾趣
|
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做linux研究的人远比做WinCE的人多,很多产家提供的资料也是以linux为主。我一 ...… 查看全部问答> |
|
模拟电路到底有多难? 如何去设计一个模拟电路? 面对一堆功能,模拟电路的解决方案从哪下手? 一片茫然 《模拟电路基础》翻了一遍又一遍 总是看到了是懂,不看又什么都不懂 学不能用 让人很痛苦 有人指点指点么? 涕零!… 查看全部问答> |
|
公司现在正开始一个新项目,思路是想把wince6.0上播放的avi通过UVC的方式直接在电脑上当usb摄像头的方式显示出来,现在还很茫然,请各位大虾给点意见。… 查看全部问答> |
|
最近在看u-boot,有个问题一直不是很确定: 在cpu目录下面arm920t下的是start.S里面开始,下面的语句: .globl _start _start: b reset ldr   ...… 查看全部问答> |
|
有台设备 需要加热 电炉丝需要 电压50伏 功率达4K瓦 我想用用电力控制器(可控硅模块)把电压220降到50伏给电炉丝供电能到行不 电源到可控硅这段电线上将承受多大电流?… 查看全部问答> |
|
(1)安装Windows Mobile 5.0系统及Platform Builder for Windows Mobile 5.0 WM50_OAK_RTM \\Microsoft Platform Builder for Windows Mobile 5.0.msi (with it can download & debug binary) (2)安装升级包,升级到WM 6.0 AKU604.msi(Wind ...… 查看全部问答> |




