stxihei字体下载16.xbf是什么库

【HAL库每天一例】第052例:烧写中文字库到串行Flash - STM32/STM8技术论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
【HAL库每天一例】第052例:烧写中文字库到串行Flash
19:33:31  
【HAL库每天一例】系列例程从今天开始持续更新。。。。。
我们将坚持每天至少发布一个基于YS-F1Pro开发板的HAL库例程,
该系列例程将带领大家从零开始使用HAL库,后面会持续添加模块应用例程。
同样的,我们还程序发布基于HAL库的指导文档和视频教程,欢迎持续关注,并提出改进意见。
例程下载:
资料包括程序、相关说明资料以及软件使用截图
密码:r3s3
(硬石YS-F1Pro开发板HAL库例程持续更新\1. 软件设计之基本裸机例程(HAL库版本)\YSF1_HAL-052. 烧写中文字库到串行Flash)
&&******************************************************************************
&&*& && && && && && && && && &硬石YS-F1Pro开发板例程功能说明
&&*&&例程名称: YSF1_HAL-052. 烧写中文字库到串行Flash
&&******************************************************************************
&&* 说明:
&&* 本例程配套硬石stm32开发板YS-F1Pro使用。
&&* 淘宝:
&&* 论坛:
&&* 版权归硬石嵌入式开发团队所有,请勿商用。
&&******************************************************************************
【1】例程简介
&&YS-F1Pro开发板集成了一个16M字节大小的串行Flash,为极大发挥它的作用,我们可以把裸机
和STemWin显示中文所需要的中文字库烧录在串行Flash空间上,这样可以脱离使用SD卡就可以任意
显示中文。本例程就是把中文字库烧写到串行Flash空间上,对于串行Flash的使用空间规划的出厂
设置可参考文档:串行Flash存储空间规划(W25Q128共16M字节).xlsx。
【2】跳线帽情况
******* 为保证例程正常运行,必须插入以下跳线帽 **********
丝印编号& &&&IO端口& && &目标功能引脚& && &&&出厂默认设置
&&JP1& && &&&PA10& && &&&TXD(CH340G)& && && & 已接入
&&JP2& && &&&PA9& && && &RXD(CH340G)& && && & 已接入
【3】操作及现象
&&将一张小于32G大小的Micro SD卡插入到开发板上的SD卡槽内,使用开发板配套的MINI USB线连
接到开发板标示“调试串口”字样的MIMI USB接口(需要安装驱动),在电脑端打开串口调试助手
工具,设置参数为-N-1。下载完程序之后,在串口调试助手窗口可接收到信息。
/******************* (C) COPYRIGHT
硬石嵌入式开发团队 *****END OF FILE****/
CubeMX_1.jpg (132.21 KB, 下载次数: 1)
19:30 上传
CubeMX_2.jpg (118.15 KB, 下载次数: 1)
19:30 上传
CubeMX_3.jpg (116.42 KB, 下载次数: 1)
19:30 上传
CubeMX_4.jpg (110.99 KB, 下载次数: 1)
19:30 上传
CubeMX_5.jpg (106.75 KB, 下载次数: 3)
19:30 上传
CubeMX_6.jpg (82.77 KB, 下载次数: 2)
19:31 上传
CubeMX_7.jpg (100.88 KB, 下载次数: 1)
19:31 上传
CubeMX_8.jpg (108.35 KB, 下载次数: 1)
19:31 上传
CubeMX_9.jpg (113.41 KB, 下载次数: 2)
19:31 上传
CubeMX_10.jpg (108.01 KB, 下载次数: 1)
19:31 上传
CubeMX_11.jpg (148.56 KB, 下载次数: 2)
19:31 上传
main.c文件内容
/**
&&******************************************************************************
&&* 文件名程: main.c
&&* 作& & 者: 硬石嵌入式开发团队
&&* 版& & 本: V1.0
&&* 编写日期:
&&* 功& & 能: 基于串行FLASH的FatFS文件系统实现与基本功能测试
&&******************************************************************************
&&* 说明:
&&* 本例程配套硬石stm32开发板YS-F1Pro使用。
&&*
&&* 淘宝:
&&* 论坛:
&&* 版权归硬石嵌入式开发团队所有,请勿商用。
&&******************************************************************************
&&*/
&&
//使用之前:
//1.保证已经把字库文件拷贝到SD卡内并插入到开发板上,
//五个文件:stxinhei16.xbf,kaiti24.xbf,UNIGBK.BIN,GBK_HZ1616.FON和GBK_HZ2424.FON
//2.使用该工程写字库文件需要一定时间请耐心等候保存字库写入成功
//3.使用该工程建议使用串口调试助手工具查看字库写入进度。
&&
&&
/* 包含头文件 ----------------------------------------------------------------*/
#include &stm32f1xx_hal.h&
#include &usart/bsp_debug_usart.h&
#include &ff.h&
#include &ff_gen_drv.h&
#include &drivers\sd_diskio.h&
#include &spiflash/bsp_spiflash.h&
#include &led/bsp_led.h&
#include &key/bsp_key.h&
/* 私有类型定义 --------------------------------------------------------------*/
/* 私有宏定义 ----------------------------------------------------------------*/
#define GBK_HZ1616& && && && && && &(1)& &//1:使能烧写GBK_HZ1616.FON字库文件(裸机中文显示专用);0:不烧写
#define GBK_HZ2424& && && && && && &(1)& &//1:使能烧写GBK_HZ2424.FON字库文件(裸机中文显示专用);0:不烧写
#define FATFS_UNIGBK& && && && && & (1)& &//1:使能烧写UNIGBK.BIN字库文件(FatFS文件系统专用);0:不烧写
#define XBF_STXIHEI16& && && && && &(1)& &//1:使能烧写stxihei16.xbf字库文件(STemWin专用);0:不烧写
#define XBF_KAITI24& && && && && &&&(1)& &//1:使能烧写kaiti24.xbf字库文件(STemWin专用);0:不烧写
#define GBK_HZ1616_ADDR& && & (10*4096)& &// GBK_HZ1616.FON字库文件存放在串行Flash的地址
#define GBK_HZ2424_ADDR& && & (75*4096)& &// GBK_HZ2424.FON字库文件存放在串行Flash的地址
#define FATFS_UNIGBK_ADDR& & (332*4096)& &// UNIGBK.BIN字库文件存放在串行Flash的地址
#define XBF_STXIHEI16_ADDR& &(380*4096)& &// stxihei16.xbf字库文件存放在串行Flash的地址
#define XBF_KAITI24_ADDR& &&&(750*4096)& &// kaiti24.xbf字库文件存放在串行Flash的地址
#define GBK_HZ1616_SIZE& && && && &(64)& &// GBK_HZ1616.FON字库文件占用扇区数(每个扇区为4096个字节)
#define GBK_HZ2424_SIZE& && && &&&(144)& &// GBK_HZ2424.FON字库文件占用扇区数(每个扇区为4096个字节)
#define FATFS_UNIGBK_SIZE& && && & (43)& &// UNIGBK.BIN字库文件存放占用扇区数(每个扇区为4096个字节)
#define XBF_STXIHEI16_SIZE& && &&&(348)& &// stxihei16.xbf字库文件存占用扇区数(每个扇区为4096个字节)
#define XBF_KAITI24_SIZE& && && & (628)& &// kaiti24.xbf字库文件存占用扇区数(每个扇区为4096个字节)
/* 私有变量 ------------------------------------------------------------------*/
char SDPath[4];& && && && && && & /* SD卡逻辑设备路径 */
FATFS& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&/* FatFs文件系统对象 */
FIL& && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && && &&&/* 文件对象 */
FRESULT f_& && && && && && &&&/* 文件操作结果 */
UINT& && && && && && && && && && && && && && && && && && &/* 文件成功读写数量 */
/* 扩展变量 ------------------------------------------------------------------*/
/* 私有函数原形 --------------------------------------------------------------*/
static void printf_fatfs_error(FRESULT fresult);
/* 函数体 --------------------------------------------------------------------*/
/**
&&* 函数功能: 主函数.
&&* 输入参数: 无
&&* 返 回 值: 无
&&* 说& & 明: 无
&&*/
int main(void)
{&&
&&uint32_t write_addr=0,j=0;
& && &&&uint8_t tempbuf[256]={0};
&&
&&/* 复位所有外设,初始化Flash接口和系统滴答定时器 */
&&HAL_Init();
&&/* 配置系统时钟 */
&&SystemClock_Config();
&&/* 初始化LED灯 */
&&LED_GPIO_Init();
&&/* 初始化独立按键 */
&&KEY_GPIO_Init();
&&
&&/* 初始化串口并配置串口中断优先级 */
&&MX_DEBUG_USART_Init();
&&printf(&****** 这是一个烧写中文字库到串行Flash空间内实验 ******\n&);
&&printf(&》》按下开发板KEY1按键开始烧写\n&);
&&
&&while(KEY1_StateRead()==KEY_UP);//等待按键被按下
&&
&&/* 初始化串行Flash */
&&MX_SPIFlash_Init();
&&
&&/* 注册一个FatFS设备:串行FLASH */
&&if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
&&{
& & //在串行FLASH挂载文件系统,文件系统挂载时会对串行FLASH初始化
& & f_res = f_mount(&fs,(TCHAR const*)SDPath,1);
& & printf_fatfs_error(f_res);
& & if(f_res!=FR_OK)
& & {
& && &printf(&!!SD卡挂载文件系统失败。(%d)\n&,f_res);
& && &//如果文件系统挂载失败就停机
& && &while(1);
& & }
& & else
& & {
& && &printf(&》SD卡文件系统挂载成功\n&);
& & }
& &
/**************************&&GBK_HZ1616.FON字库文件&&*****************************************/& && && && && &
#if GBK_HZ1616
& & f_res = f_open(&file,&0:GBK_HZ1616.FON&,FA_OPEN_EXISTING | FA_READ);
& & printf(&f_open GBK_HZ1616.FON res=%d\n&,f_res);
& &
& & if(f_res==FR_OK)
& & {
& && &// 擦除空间
& && &write_addr=GBK_HZ1616_ADDR;
& && &for(j=0;j&GBK_HZ1616_SIZE;j++)//擦除扇区
& && &{
& && &&&SPI_FLASH_SectorErase(write_addr+j*4096);
& && &}
& && &
& && &// 烧写字库文件
& && &j=0;
& && &write_addr=GBK_HZ1616_ADDR;
& && &while(f_res == FR_OK)
& && &{
& && &&&f_res = f_read( &file, tempbuf, 256, &fnum);//读取数据& && && &
& && &&&if(f_res!=FR_OK)& && && && && && && && & //执行错误&&
& && &&&SPI_FLASH_PageWrite(tempbuf,write_addr,256);&&//拷贝数据到串行flash上& &
& && &&&write_addr+=256;& && && && && && && && && && &&&
& && &&&j++;
& && &&&if(fnum !=256)
& && &}
& & }
& & f_close(&file);
& &
& & SPI_FLASH_BufferRead(tempbuf,GBK_HZ1616_ADDR,256);& && && && && && && && &//读取数据,打印验证
& & printf(&readbuf GBK_HZ1616.FON:\n&);
& & for(j=0;j&256;j++)
& && &printf(&%02X &,tempbuf[j]);
& & printf(&\n如果tempbuf不全为 FF ,那么说明字库拷贝成功!!!\n&);
& & if((tempbuf[0]!=0xff)&&(tempbuf[1]!=0xff))LED1_ON;
#endif&&//#if GBK_HZ1616
/**************************&&END GBK_HZ1616.FON字库文件&&*****************************************/&&
&&
/**************************&&GBK_HZ2424.FON字库文件&&*****************************************/& && && && && &
#if GBK_HZ2424
& & f_res = f_open(&file,&0:GBK_HZ2424.FON&,FA_OPEN_EXISTING | FA_READ);
& & printf(&f_open GBK_HZ2424.FON res=%d\n&,f_res);
& &
& & if(f_res==FR_OK)
& & {
& && &// 擦除空间
& && &write_addr=GBK_HZ2424_ADDR;
& && &for(j=0;j&GBK_HZ2424_SIZE;j++)//擦除扇区
& && &{
& && &&&SPI_FLASH_SectorErase(write_addr+j*4096);
& && &}
& && &
& && &// 烧写字库文件
& && &j=0;
& && &write_addr=GBK_HZ2424_ADDR;
& && &while(f_res == FR_OK)
& && &{
& && &&&f_res = f_read( &file, tempbuf, 256, &fnum);//读取数据& && && &
& && &&&if(f_res!=FR_OK)& && && && && && && && & //执行错误&&
& && &&&SPI_FLASH_PageWrite(tempbuf,write_addr,256);&&//拷贝数据到串行flash上& &
& && &&&write_addr+=256;& && && && && && && && && && &&&
& && &&&j++;
& && &&&if(fnum !=256)
& && &}
& & }
& & f_close(&file);
& &
& & SPI_FLASH_BufferRead(tempbuf,GBK_HZ2424_ADDR,256);& && && && && && && && &//读取数据,打印验证
& & printf(&readbuf GBK_HZ2424.FON:\n&);
& & for(j=0;j&256;j++)
& && &printf(&%02X &,tempbuf[j]);
& & printf(&\n如果tempbuf不全为 FF ,那么说明字库拷贝成功!!!\n&);
& & if((tempbuf[0]!=0xff)&&(tempbuf[1]!=0xff))LED2_ON;
#endif&&//#if GBK_HZ2424
/**************************&&END GBK_HZ2424.FON字库文件&&*****************************************/&&
&&
/**************************&&UNIGBK.BIN字库文件&&*****************************************/& && && && && &
#if FATFS_UNIGBK
& & f_res = f_open(&file,&0:UNIGBK.BIN&,FA_OPEN_EXISTING | FA_READ);
& & printf(&f_open UNIGBK.BIN res=%d\n&,f_res);
& &
& & if(f_res==FR_OK)
& & {
& && &// 擦除空间
& && &write_addr=FATFS_UNIGBK_ADDR;
& && &for(j=0;j&FATFS_UNIGBK_SIZE;j++)//擦除扇区
& && &{
& && &&&SPI_FLASH_SectorErase(write_addr+j*4096);
& && &}
& && &
& && &// 烧写字库文件
& && &j=0;
& && &write_addr=FATFS_UNIGBK_ADDR;
& && &while(f_res == FR_OK)
& && &{
& && &&&f_res = f_read( &file, tempbuf, 256, &fnum);//读取数据& && && &
& && &&&if(f_res!=FR_OK)& && && && && && && && & //执行错误&&
& && &&&SPI_FLASH_PageWrite(tempbuf,write_addr,256);&&//拷贝数据到串行flash上& &
& && &&&write_addr+=256;& && && && && && && && && && &&&
& && &&&j++;
& && &&&if(fnum !=256)
& && &}
& & }
& & f_close(&file);
& &
& & SPI_FLASH_BufferRead(tempbuf,FATFS_UNIGBK_ADDR,256);& && && && && && && && &//读取数据,打印验证
& & printf(&readbuf UNIGBK.BIN:\n&);
& & for(j=0;j&256;j++)
& && &printf(&%02X &,tempbuf[j]);
& & printf(&\n如果tempbuf不全为 FF ,那么说明字库拷贝成功!!!\n&);
& & if((tempbuf[0]!=0xff)&&(tempbuf[1]!=0xff))LED3_ON;
#endif&&//#if FATFS_UNIGBK
/**************************&&END UNIGBK.BIN字库文件&&*****************************************/&&
&&
/**************************&&stxihei16.xbf字库文件&&*****************************************/& && && && && &
#if XBF_STXIHEI16
& & f_res = f_open(&file,&0:stxihei16.xbf&,FA_OPEN_EXISTING | FA_READ);
& & printf(&f_open stxinhei16.xbf res=%d\n&,f_res);
& &
& & if(f_res==FR_OK)
& & {
& && &// 擦除空间
& && &write_addr=XBF_STXIHEI16_ADDR;
& && &for(j=0;j&XBF_STXIHEI16_SIZE;j++)//擦除扇区
& && &{
& && &&&SPI_FLASH_SectorErase(write_addr+j*4096);
& && &}
& && &
& && &// 烧写字库文件
& && &j=0;
& && &write_addr=XBF_STXIHEI16_ADDR;
& && &while(f_res == FR_OK)
& && &{
& && &&&f_res = f_read( &file, tempbuf, 256, &fnum);//读取数据& && && &
& && &&&if(f_res!=FR_OK)& && && && && && && && & //执行错误&&
& && &&&SPI_FLASH_PageWrite(tempbuf,write_addr,256);&&//拷贝数据到串行flash上& &
& && &&&write_addr+=256;& && && && && && && && && && &&&
& && &&&j++;
& && &&&if(fnum !=256)
& && &}
& & }
& & f_close(&file);
& &
& & SPI_FLASH_BufferRead(tempbuf,XBF_STXIHEI16_ADDR,256);& && && && && && && && &//读取数据,打印验证
& & printf(&readbuf stxihei16.xbf:\n&);
& & for(j=0;j&256;j++)
& && &printf(&%02X &,tempbuf[j]);
& & printf(&\n如果tempbuf不全为 FF ,那么说明字库拷贝成功!!!\n&);
& & if((tempbuf[0]!=0xff)&&(tempbuf[1]!=0xff))LED1_OFF;
#endif&&//#if XBF_STXIHEI16
/**************************&&END stxihei16.xbf字库文件&&*****************************************/&&
&&
/**************************&&kaiti24.xbf字库文件&&*****************************************/& && && && && &
#if XBF_KAITI24
& & f_res = f_open(&file,&0:kaiti24.xbf&,FA_OPEN_EXISTING | FA_READ);
& & printf(&f_open kaiti24.xbf res=%d\n&,f_res);
& &
& & if(f_res==FR_OK)
& & {
& && &// 擦除空间
& && &write_addr=XBF_KAITI24_ADDR;
& && &for(j=0;j&XBF_KAITI24_SIZE;j++)//擦除扇区
& && &{
& && &&&SPI_FLASH_SectorErase(write_addr+j*4096);
& && &}
& && &
& && &// 烧写字库文件
& && &j=0;
& && &write_addr=XBF_KAITI24_ADDR;
& && &while(f_res == FR_OK)
& && &{
& && &&&f_res = f_read( &file, tempbuf, 256, &fnum);//读取数据& && && &
& && &&&if(f_res!=FR_OK)& && && && && && && && & //执行错误&&
& && &&&SPI_FLASH_PageWrite(tempbuf,write_addr,256);&&//拷贝数据到串行flash上& &
& && &&&write_addr+=256;& && && && && && && && && && &&&
& && &&&j++;
& && &&&if(fnum !=256)
& && &}
& & }
& & f_close(&file);
& &
& & SPI_FLASH_BufferRead(tempbuf,XBF_KAITI24_ADDR,256);& && && && && && && && &//读取数据,打印验证
& & printf(&readbuf kaiti24.xbf:\n&);
& & for(j=0;j&256;j++)
& && &printf(&%02X &,tempbuf[j]);
& & printf(&\n如果tempbuf不全为 FF ,那么说明字库拷贝成功!!!\n&);
& & if((tempbuf[0]!=0xff)&&(tempbuf[1]!=0xff))LED3_OFF;
#endif&&//#if XBF_KAITI24
/**************************&&END kaiti24.xbf字库文件&&*****************************************/&&
& &
& & /* 不再使用,取消挂载 */
& & f_res = f_mount(NULL,(TCHAR const*)SDPath,1);& && &&&
&&}
& &
&&/* 注销一个FatFS设备:SD卡 */
&&FATFS_UnLinkDriver(SDPath);
&&
&&/* 无限循环 */
&&while (1)
&&{
&&}
}
/******************* (C) COPYRIGHT
硬石嵌入式开发团队 *****END OF FILE****/
复制代码
串口调试助手截图.jpg (176.33 KB, 下载次数: 1)
19:31 上传
15:21:30  
谢谢楼主。。。。。
13:39:51  
PCB在线计价下单
板子大小:
板子数量:
PCB 在线计价
楼主,请问怎么样操作呢?求操作步骤,不会烧录程序到flash中
工程师职场
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司

我要回帖

更多关于 stxihei.shx 的文章

 

随机推荐