体系中运用过多的汉字会呈现芯片容量不够用的问题,可将数据存储在外部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);
}
}