如何用STM32的片内Flash存储中文字库

发布者:咖啡小熊最新更新时间:2016-06-12 来源: eefocus关键字:STM32  片内Flash  中文字库 手机看文章 扫描二维码
随时随地手机看文章
   在嵌入式系统中,成本往往是敏感的,如果你的Flash足够大,就可以省去片外Flash,我用结构体实现了该功能,并分享给广大网友,最后附有下载链接。

在fonts.h中:

   typedef struct _tFont
  
  const uint16_t *table;
  uint16_t Width;
  uint16_t Height;
 
} sFONT;

extern sFONT Font8x8;
extern sFONT Font8x12_bold;
extern sFONT Font8x12;
extern sFONT Font12x12;
extern sFONT Font16x24;

#define GL_Font8x8          Font8x8
#define GL_Font8x12_bold    Font8x12_bold
#define GL_Font8x12         Font8x12
#define GL_Font12x12        Font12x12
#define GL_Font16x24        Font16x24

在fonts.c中

const uint16_t ASCII16x24_Table []={………………};  //字模

sFONT Font16x24 = {
  ASCII16x24_Table,
  16,
  24,
};

sFONT Font12x12 = {
  ASCII12x12_Table,
  12,
  12,
};

sFONT Font8x12 = {
  ASCII8x12_Table,
  8,
  12,
};

sFONT Font8x12_bold ={
    ASCII8x12_bold_Table,
    8,
    12,
  };


sFONT Font8x8 = {
  ASCII8x8_Table,
  8,
  8,
};

在main.c中调用:

#include "user_config.h"

  uint8_t test1[]="你见,或者不见我,我就在那里,不悲不喜;";
  uint8_t test2[]="你念,或者不念我,我就在那里,不来不去;";
  uint8_t test3[]="你爱,或者不爱我,爱就在那里,不增不减;";
  uint8_t test4[]="你跟,或者不跟我,我的手就在你手里,";
  uint8_t test5[]="不舍 不弃.";
 uint8_t test6[]="默然 相爱";
 uint8_t test7[]="寂静 喜欢";
 
int main(void)
{
  u8 i,j,k;
  NVIC_Config();
  SysTick_Init();
  STM_EVAL_LEDInit(LED1);
  STM_EVAL_LEDInit(LED2);
  STM_EVAL_LEDInit(LED3);
  STM_EVAL_LEDInit(LED4);
  USART_Config( COM1,115200);
  STM3210E_LCD_Init();

  LCD_Clear(LCD_COLOR_MAGENTA);
  LCD_SetColors(LCD_COLOR_RED,LCD_COLOR_CYAN);

  LCD_DisplayStringLine(LCD_LINE_0, (uint8_t *)MESSAGE1);
  LCD_DisplayStringLine(LCD_LINE_1, (uint8_t *)MESSAGE2);
  LCD_DisplayStringLine(LCD_LINE_2, (uint8_t *)MESSAGE3);
  LCD_DisplayStringLine(LCD_LINE_3, (uint8_t *)MESSAGE4);
 
  printf("nr %s", MESSAGE1);
  printf(" %s", MESSAGE2);
  printf(" %snr", MESSAGE3);
 
  LCD_Clear(LCD_COLOR_BLUE);

 GL_Clear(GL_Grey);
 GL_SetTextColor(GL_Blue);
 GL_SetBackColor(GL_Yellow);
 GL_SetFont(GL_FONT_GB2312);
 LCD_ClearLine(LINE(0));  // disp yellow line
 LCD_ClearLine(LINE(9));
 GL_DisplayAdjStringLine(0,220,(uint8_t*)"Loading...",GL_FALSE);
 GL_DisplayAdjStringLine(LINE(2),310,test1,GL_TRUE);  //如果横屏,Y轴递减
 GL_DisplayAdjStringLine(LINE(3),310,test2,GL_TRUE);
 GL_DisplayAdjStringLine(LINE(4),310,test3,GL_TRUE);
 GL_DisplayAdjStringLine(LINE(5),310,test4,GL_TRUE);
 GL_DisplayAdjStringLine(LINE(6),310,test5,GL_TRUE);
  GL_DisplayAdjStringLine(LINE(7),310,test6,GL_TRUE);
 GL_DisplayAdjStringLine(LINE(8),310,test7,GL_TRUE);
 GL_DisplayAdjStringLine(LINE(9),130,"蔡志威",GL_TRUE); 
 GL_SetFont(GL_FONT_SMALL);
 //SetFont(GL_Font8x12_bold); 
 GL_DisplayAdjStringLine(220,80," 2013-10-08",GL_TRUE); 
  while (1)
    
  }
}

 

map文件:

==============================================================================


      Code (inc. data)   RO Data    RW Data    ZI Data      Debug  

      9944        738     293276        360       1080           Grand Totals
      9944        738     293276        224       1080           ELF Image Totals (compressed)
      9944        738     293276        224                   ROM Totals

==============================================================================

    Total RO  Size (Code + RO Data)               303220 ( 296.11kB)
    Total RW  Size (RW Data + ZI Data)              1440 (   1.41kB)
    Total ROM Size (Code + RO Data + RW Data)     303444 ( 296.33kB)

==============================================================================


实验效果:

 [转载]如何用STM32的片内Flash存储中文字库
 百为开发平台:
[转载]如何用STM32的片内Flash存储中文字库

 

 工程源码下载地址:

 

http://share.weiyun.com/c10c5e371d01f33a97e8c2afa0ec170d 

关键字:STM32  片内Flash  中文字库 引用地址:如何用STM32的片内Flash存储中文字库

上一篇:s3c2440的dma操作的一般步骤
下一篇:S3C2440通过v4l2采集在lcd上显示

推荐阅读最新更新时间:2024-03-16 14:56

STM32上电复位不正常 手动复位正常的原因
描述: STM32f0按键模块电路经常遇到上电不复位的情况,芯片采用的是stm32f030,按键模块采用ZLG7290芯片、4X4按键LED矩阵。ZLG7290是周立功公司专门开发的按键芯片,其最大可支持64个按键和64个LED,可通过I2C协议对其读写,ZLG7290与stm32f030复位电路采用datasheet参考电路,如下: 正常情况下,电路上电后会有一个LED全部点亮的过程,上电稳定延时后,LED自动全部熄灭,正常运行时,按下相应按键其对应的LED灯应被点亮。 问题: STM32复位电路内部有自带的上拉电阻,同时PVD的电源检测阈值采用的是默认值2.2V,采用电池供电,电压表测量引脚电压在2.8V左右,但是电路
[单片机]
<font color='red'>STM32</font>上电复位不正常 手动复位正常的原因
STM32 网络通信Web Server中 SSI与CGI的应用解析
本次主要解析STM32网络通信中WebServer应用,从网页界面的编写到浏览器与STM32之间进行通信的数据来说明SSI与CGI的原理及应用,并对GET与POST指令进行应用解析。 硬件和软件环境: 1.硬件环境:STM32F407,网卡芯片LAN8720,其他部分参考正点原子的407探索者开发板。 2.软件环境:keil5,LWIP1.4.1,主要是基于正点原子STM32F407探索者的第六十章网络通信实验程序。 一、程序流程解析 为了方便查看浏览器与STM32之间的数据通信,建议程序中使用固定IP的方式,如192.168.1.101,建议使用软件Wireshark来查看网络数据。 首先是打开Wireshark,选
[单片机]
<font color='red'>STM32</font> 网络通信Web Server中 SSI与CGI的应用解析
STM32串口DMA超时接收方法,可大大节约CPU时间
本办法使用定时器定时查询DMA接收到的数据,如果超过设定的周期则认为本次数据包结束,将数据拷贝到缓冲区,交由其他程序处理。可以接收任意大小的数据包,尤其适用于MODBUS等协议,曾经用于GPS、GPRS等接收,很实用。本方法占用CPU时间极少,尤其是波特率很高时,效果更加明显。 当某一个串口的数据接收超时以后,定时器中断中将数据拷贝到缓冲区,在主程序中可以判断数据标志UART1_Flag,大于0的时候即代表有数据接收到,可以处理,处理完后将此变量清零即可。 两个数据包间隔较小时,可以将定时器的周期调短些。 //超时时间定义 #define UART1_TimeoutComp 2 //20ms #define UART2
[单片机]
UCOSIII简介于移植
UCOSIII简介 UCOSIII是一个可裁剪,可固化,可剥夺的多任务系统。相比于前代产品其最大任务数目没有限制,优先级相同的任务数目没有限制且有无需调度的的发送机制。 UCOSIII文件 在移植UCOSIII之前我们需要准备两样东西:一个是UCOSIII的源码,一个是Micrium官方在STM32F1xx上移植好的工程文件。 在Micrium文件夹中有四个文件夹 1、EvaBoards文件夹 这个文件夹里面就是关于STM32F107的工程文件。其中的处app.c和stm32f10x_conf.h外的文件的八个文件使我们需要添加到工程文件当中的。 2、uC-CPU文件夹 这个文件夹里面是与CPU相关的代码,有下面几个文
[单片机]
STM32学习记录——开发总流程
前期准备 建立标准库模板 步骤: 1、STM官网下载标准库(STM32F10x_StdPeriph_Lib_V3.5.0),解压打开之后 有用的就是Libraries文件夹和Project文件夹,复制相关文件,建立模板。 此文件夹就是工程模板,其中 CMSIS、STM32F10x_StdPeriph_Driver是复制官方Libraries文件夹下的 user中是Project文件夹的 lst放置listing文件 out放置输出文件,即相应的.hex文件 project放置工程文件。 2、新建工程 工程中文件的排版如图 开发流程 1、复制工程模板 2、在user下添加.c文件和.h
[单片机]
<font color='red'>STM32</font>学习记录——开发总流程
STM32笔记(二)—STM32与寄存器概念(附寄存器版简易LED流水灯)
(内核+外设) ICode 总线 ICode 中的 I 表示 Instruction,即指令。我们写好的程序编译之后都是一条条指令,存 放在 FLASH 中,内核要读取这些指令来执行程序就必须通过 ICode 总线,它几乎每时每刻都需要被使用,它是专门用来取指的。 驱动单元 DCode 总线 DCode 中的 D 表示 Data,即数据,那说明这条总线是用来取数的。我们在写程序的时候,数据有常量和变量两种,常量就是固定不变的,用 C 语言中的 const 关键字修饰,是 放到内部的 FLASH 当中的,变量是可变的,不管是全局变量还是局部变量都放在内部的 SRAM。因为数据可以被 Dcode 总线和 D
[单片机]
<font color='red'>STM32</font>笔记(二)—<font color='red'>STM32</font>与寄存器概念(附寄存器版简易LED流水灯)
stm32 中断向量表 NVIC_SetVectorTable() 应用
STM32 的中断向量表的设置主要是用在IAP 程序中, 如果是普通的 flash 中只有一个程序,一般不需要设置这个。 顾名思义,这个表存放的是中断服务函数的入口地址,当发生中断时, CPU来这个表中查询,以此获取中断函数的入口地址。 在stm32 的启动文件中,设置完成堆栈,就来设置 中断向量表, AREA RESET, DATA, READONLY ; 定义只读数据段,实际上是在CODE区(假设STM32从FLASH启动,则此中断向量表起始地址即为0x8000000) 如果改变了程序的起始地址,这种就是IAP的情况了,像这个样子 那么这个时候就需要重新设置中断向量表 NVIC_SetV
[单片机]
<font color='red'>stm32</font> 中断向量表 NVIC_SetVectorTable() 应用
意法半导体STM32系列两周年再添新丁
意法半导体在STM32系列微控制器两周年生日之时,宣布基于ARM Cortex™-M3处理器的STM32互联系列(Connectivity Line)微控制器已全面投产,新产品如预期准时上市。自此,意法半导体STM32家族已拥有包括基本型、USB基本型、增强型以及互联型四个产品线,70个型号的产品引脚与功能相互兼容。 STM32互联系列让设计人员可以在同时需要以太网、USB、CAN和音频级I2S接口的产品设计中发挥工业标准的32位微处理器的优异性能。目前互联系列下设两个产品系列:STM32F105和 STM32F107。STM32F105系列集成一个全速USB 2.0 Host/Device/OTG接口和两个具有先进
[单片机]
意法半导体<font color='red'>STM32</font>系列两周年再添新丁
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved