STM32如何实现W25X16的汉字字库存储

嵌入式技术

1368人已加入

描述

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

STM32

整个程序中,关键在于串口接收中断函数的编写,如下:

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开始,一个字节一个字节进行写入。

代码为最简单的通信代码,不过多说,然后打开串口助手,进行配置,勾选启用文件数据源,选择下载或者自己做好的字库文件;勾选按十六进制发送,在芯片完全擦除后再进行发送:

STM32

经过几十秒的等待,字库会发送完成,通过看发送的字节数与字库的字节数对比,即可知道是否发送完毕。(上图中发送字节数不是字库字节数)前面的文章有写过汉字点阵获取的方法,此处不再赘述。如此,即可通过SPI访问外部FLASH来调用汉字,并将其显示在显示屏上。同样对于asiic码可以将其写入某个块中,然后通过地址的偏移来计算对应的字符。

对于图片的存储也是相同原理,在之前实现汉字显示的基础上,笔者测试了图片的显示,而且获得正确的显示。笔者使用的显示屏为TFT1.44的,为128*128,占用32768字节,两张图片正好占用65536字节,也就是64Kb,而W25X16一个块是64Kb,进行块擦除后,每个块可以载入两张图片,非常完美。基本程序相同,只是此时因为字库的写入,不使用片擦除指令,而使用块擦除实现对未使用块区的擦除:

STM32

计算了下,字库占用了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);

  }

  }         

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分