历史上的今天
今天是:2025年04月13日(星期日)
2018年04月13日 | STM32通过串口向外部FLASH(W25X16)写入字库
2018-04-13 来源:eefocus
系统中使用过多的汉字会出现芯片容量不够用的问题,可将数据存储在外部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个块多点,因此彻底避开此区域,从第五块开始擦除,然后将准备好的图片点阵,通过串口写入W25X16,。注意:获取图片的点阵数据后,文本中只连续放图片十六进制的数据,其他的字符"0x"、逗号、回车都不能存在:
可以打开看下字库文件,然后对获取的图片文件进行编辑即可。下面贴出自己编写的图片显示的代码:
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);
}
}
史海拾趣
|
想快速学会ARM及嵌入式linux的进,精品资料 ARM及嵌入式linux培训视频少有的精品学习资料!出售此视频 (这是一个培训班的授课内容,参加这个培训班费用要4千多元!) 看这个视频差不多相当于上一次班,并且看不懂可以重复学习.对初学者 ...… 查看全部问答> |
|
第01章 绪论 19页.ppt 第02章 半导体二极管及基本电路 37页.ppt 第03章 半导体三极管及放大电路基础 82页.ppt 第04章 场效应管放大电路 34页.ppt 第05章 功率放大器 18页.ppt 第06章 集成电路运算放大器 36页.ppt 第08章 信号的运算与处理电 ...… 查看全部问答> |
|
一个CAB安装包能不能实现安装完后接着自动运行一个EXE文件啊? 请问一个CAB安装包能不能实现安装完后接着自动运行一个EXE文件啊?EXE文件是外部调用的,比如是和CAB文件同一目录里… 查看全部问答> |
|
本人初学单片机,很多东西不懂,望大侠们帮我解答以下几个问题,多谢. 1.请问什么软件能把用ICCAVR写好的程序烧录进EEPROM ? 2.板子上有一个6针脚的长方形接口,估计就是传说中的USART(串口)吧,烧录前是不是用串口线连接电脑的串口和板子上的这个 US ...… 查看全部问答> |
|
1 文件过滤驱动捕获文件操作之后,如何能够从驱动立刻通知应用程序知道呢? 比如,杀毒软件得实施监控,能够立刻让界面之后某个程序被用户打开了 我想让我得驱动捕获到读和写得时候立刻通知应用程序知道 2 文件过滤驱动,捕获到写请求得时候 应用 ...… 查看全部问答> |
|
代朋友咨询这个问题。 他把RIL的mdd代码从public移到自己bsp的driver下面,然后把PDD也移植过来,然后编译生成了rilgsm.dll,然后修改了platform.bib和platform.reg文件,然后把此两个文件拷贝到OSDesigns\\......\\release 目录下,然后makeimg, ...… 查看全部问答> |
|
懒得废话 想下就下 ARM_Linux 是系统开发 和 驱动开发的课件 还包括QT 和 SQLite 貌似一次发不上去啊 扫楼好了 等下啊 4个pdf 应该打包的 qq邮箱发送的的 倒 ...… 查看全部问答> |




