STM32F4更新W25Q16字库源程序

发布者:码梦狂人最新更新时间:2019-10-14 来源: eefocus关键字:STM32F4  W25Q16  字库 手机看文章 扫描二维码
随时随地手机看文章

一开始我下载了读取SD卡的程序,但液晶显示屏幕上没反应,于是我就下载了这个关于更新字库的程序,就有反应了。
本实验将实现如下功能:开机的时候先检测W25Q16中是否已经存在字库,如果存在,则按次序显示汉字(三种字体都显示)。如果没有,则检测SD卡和文件系统,并查找SYSTEM文件夹下的FONT文件夹,在该文件夹内查找UNIGBK.BIN、GBK12.FON、GBK16.FON (这几个文件的由来,我们前面已经介绍了)。在检测到这些文件之后,就开始更新字库,更新完毕才开始显示汉字。通过按按键KEY0,可以强制更新字库。同样我们也是用DS0来指示程序正在运行。
 
需要拷贝到SD卡根目录文件
1,在系统(或字库)更新的时候,必须用到SYSTEM文件夹,请将该文件夹下的SYSTEM文件夹拷贝到SD卡根目录。
2,测试用文件--该文件夹是用来测试用的,里面包含一些文本/图片/音乐/视频等文件,这个文件不一定要拷贝。
3,默认我们已经将这两个文件夹拷贝到了FLASH磁盘(磁盘名:ALIENTEK,即W25Q128)里面。

注意:
1,本例程支持12*12/16*16 大小的汉字显示。
2,如果想更新字库,必须自备SD卡一个。 

单片机源程序如下:

#include "sys.h"

#include "delay.h"

#include "usart.h"

#include "led.h"

#include "lcd.h"

#include "key.h"  

#include "sram.h"   

#include "malloc.h" 

#include "usmart.h"  

#include "sdio_sdcard.h"    

#include "malloc.h" 

#include "w25qxx.h"    

#include "ff.h"  

#include "exfuns.h"    

#include "fontupd.h"

#include "text.h"        


//汉字显示 实验 -库函数版本

//STM32F4工程模板-库函数版本



int main(void)

{        

        u32 fontcnt;                  

        u8 i,j;

        u8 fontx[2];//gbk码

        u8 key,t;

        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2

        delay_init(168);  //初始化延时函数

        uart_init(115200);                //初始化串口波特率为115200

        LED_Init();                                        //初始化LED  

        LCD_Init();                                        //LCD初始化  

        KEY_Init();                                        //按键初始化  

        W25QXX_Init();                                //初始化W25Q128

        usmart_dev.init(168);                //初始化USMART

        my_mem_init(SRAMIN);                //初始化内部内存池 

        my_mem_init(SRAMCCM);                //初始化CCM内存池 

        exfuns_init();                                //为fatfs相关变量申请内存  

          f_mount(fs[0],"0:",1);                 //挂载SD卡 

        f_mount(fs[1],"1:",1);                 //挂载FLASH.

//        W25QXX_Erase_Chip();//擦除

        while(font_init())                         //检查字库

        {

UPD:    

                LCD_Clear(WHITE);                           //清屏

                POINT_COLOR=RED;                        //设置字体为红色                                

                LCD_ShowString(30,50,200,16,16,"Mcudev STM32F4");

                while(SD_Init())                        //检测SD卡

                {

                        LCD_ShowString(30,70,200,16,16,"SD Card Failed!");

                        delay_ms(200);

                        LCD_Fill(30,70,200+30,70+16,WHITE);

                        delay_ms(200);                    

                }                                                                                                                     

                LCD_ShowString(30,70,200,16,16,"SD Card OK");

                LCD_ShowString(30,90,200,16,16,"Font Updating...");

                key=update_font(20,110,16,"0:");//更新字库

                while(key)//更新失败                

                {                                           

                        LCD_ShowString(30,110,200,16,16,"Font Update Failed!");

                        delay_ms(200);

                        LCD_Fill(20,110,200+20,110+16,WHITE);

                        delay_ms(200);                       

                }                   

                LCD_ShowString(30,110,200,16,16,"Font Update Success!   ");

                delay_ms(1500);        

                LCD_Clear(WHITE);//清屏               

        }  

        POINT_COLOR=RED;       

        Show_Str(30,50,200,16,"Mcudev_STM32F407开发板",16,0);                                             

        Show_Str(30,70,200,16,"GBK字库测试程序",16,0);                                             

        //Show_Str(30,90,200,16,"嵌入式开发网mcudev",16,0);                                             

        Show_Str(30,110,200,16,"2018年4月22日",16,0);

        Show_Str(30,130,200,16,"按KEY0,更新字库",16,0);

        POINT_COLOR=BLUE;  

        Show_Str(30,150,200,16,"内码高字节:",16,0);                                             

        Show_Str(30,170,200,16,"内码低字节:",16,0);                                             

        Show_Str(30,190,200,16,"汉字计数器:",16,0);


//        Show_Str(30,220,200,24,"对应汉字为:",24,0); //因为FLASH W25Q16无法装下所有三种字库,暂时不提供对24点阵字库的显示

        Show_Str(30,244,200,16,"对应汉字(16*16)为:",16,0);                         

        Show_Str(30,260,200,12,"对应汉字(12*12)为:",12,0);                         

        while(1)

        {

                fontcnt=0;

                for(i=0x81;i<0xff;i++)

                {                

                        fontx[0]=i;

                        LCD_ShowNum(118,150,i,3,16);                //显示内码高字节    

                        for(j=0x40;j<0xfe;j++)

                        {

                                if(j==0x7f)continue;

[1] [2]
关键字:STM32F4  W25Q16  字库 引用地址:STM32F4更新W25Q16字库源程序

上一篇:STM32 PWM实现精确输出脉冲数控制电机
下一篇:Stm32f103c8t6工程模板(内部晶振)源码

推荐阅读最新更新时间:2024-11-12 18:58

stm32f407之ADC(操作寄存器)
ADC 12位ADC是一种逐次逼近型模拟数字转换器。它有多达19个通道,可测量16个外部和2个内部信号源和Vbat通道。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。 有16个多路通道。 通道选择: 可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规则组中转换
[单片机]
<font color='red'>stm32f4</font>07之ADC(操作寄存器)
STM32F407之模拟I2C(二)之24C128
模拟I2C测试24C128的读写 #define GPIO_PORT_I2C GPIOH/* GPIO端口 */ #define I2C_SCL_PIN GPIO_Pin_4/* 连接到SCL时钟线的GPIO */ #define I2C_SDA_PIN GPIO_Pin_5/* 连接到SDA数据线的GPIO */ /* 定义读写SCL和SDA的宏 */ #define I2C_SCL_1() GPIO_PORT_I2C- BSRRL = I2C_SCL_PIN/* SCL = 1 */ #define I2C_SCL_0() GPIO_PORT_I2C- BSRRH = I2C_SCL_PIN/* SCL = 0 */ #de
[单片机]
正点原子STM32F4 (12) STM32串口寄存器库函数配置方法
今天讲解串口的程序编写,下面是他的寄存器 在中文参考手册的第26章有介绍它的这些寄存器 在F4的stm32f4_usart.c定义了很多的库函数 1.状态寄存器的库函数 去读取SR寄存器相应的数据然后放到,返回相应的状态标志位的值,它的返回值是一个FlagStatus型 这个值是一个枚举类型,要么是set,要么是reset 2库函数对数据寄存器的函数 第一个是发送数据,第二个是接收数据 发送数据实际上就是把数据写到DR寄存器 接收数据就是读取DR寄存器 设置波特率用的是下面这个函数 先来讲解一下波特率地记算方法 在上一讲串口功能框图中波特率是由: fpclkx/usartd
[单片机]
正点原子<font color='red'>STM32F4</font> (12) STM32串口寄存器库函数配置方法
STM32F4xx FPU的设置
浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEEE-754标准的算法来完成运算,对于8位单片机来说已经完 全是噩梦,对32为单片机来说也不会有多大改善。虽然将浮点数进行Q化处理能充分发挥32位单片机的运算性能,但是精度受到限制而不会太高。对于有 FPU(浮点运算单元)的单片机或者CPU来说,浮点加法只是几条指令的事情。 现在又FPU或者硬件浮点运算能力的主要有高端DSP(比如TI F28335/C6000/DM6XX/OMAP等),通用CPU(X87数学协处理器)和高级的ARM+DSP处理器等。 STM32-F4属于Cortex-M4F构架,这和M0、M3的最大
[单片机]
STM32F4_USART配置及细节描述
Ⅰ、概述 关于USART串口通信,可以说是MCU的标配。不管是在实际项目应用中,还是在开发过程中,它都起着很重要的作用。 在项目应用中我们常常使用UART串口进行通信,根据通信的距离及稳定性,还选择添加RS232、RS485等对UART数据进行转换。 在开发过程中,我们常常用它来打印调试信息,我们购买的开发板基本上都有一个UART通信接口(DB9的接头),这个接口主要的一个作用就是用来开发时调试使用。 本文主要针对STM32初学者,使用STM32F4标准外设库、Keil集成IDE,对STM32F4的USART进行配置及描述。1.详细描述使用自定义打印数据、自定义中断接收数据;2.重定义打印数据printf; 关于本文的更多
[单片机]
<font color='red'>STM32F4</font>_USART配置及细节描述
DMA和UART的深刻认识--串口接收的3种工作方式(附STM32F4代码)
可能会遇到的问题: 1.能实现接收但不发送 注意是否是识别函数出错 2.DMA单次传输模式要求再初始化,否者出现第二次中断不执行。使用循环模式出现的问题是要结合配置公式: 3.DMA再次初始化不完全,会出现接收一次成功,再来一次不行。第三次能接收的问题 4.串口调试连续点击的次数太快,会使的里面的发送程序出错 一.串口uart中断接收 遇到的问题: 1、串口调试接收引脚坏掉 2.接收数据识别,使用的库函数出错 串口设置的一般步骤可以总结为如下几个步骤: 1) 串口时钟使能, GPIO 时钟使能。 2) 设置引脚复用器映射:调用 GPIO_PinAFConfig 函数。 3) GPIO 初始
[单片机]
DMA和UART的深刻认识--串口接收的3种工作方式(附<font color='red'>STM32F4</font>代码)
stm32f407】轮序方式的按键应用
1. 硬件原理图: 可以看到user button是PA0 2. 程序步骤 1) 使能按键对应IO口时钟。 PA0在AHB1总线上 调用函数:RCC_AHB1PeriphClockCmd (); 2) 初始化IO模式:上拉/下拉输入。 3) 扫描IO口电平 3. 程序原码 key.h #ifndef _KEY_H_H_H #define _KEY_H_H_H #include stm32f4xx_gpio.h #include stm32f4xx_rcc.h #define KEY_ON 0 #define KEY_OFF 1 void KEY_Init(void); ui
[单片机]
【<font color='red'>stm32f4</font>07】轮序方式的按键应用
STM32F407总线存储框架及应用设计
曾有人在STMCU社区网站咨询如下问题: 由于实验需要,要用到STM32F407的两个DMA并用定时器触发,在使用过程中发现DMA1无法把GPIO的IDR数据传输到内存,调试过程中出现DMA1的数据流传输错误标志,但是使用DMA2没有问题。另外当把访问GPIO的IDR改成访问APB1下的tim5的ARR时,DMA1也能正常工作。请问这是怎么回事? 咨询者提到STM32F4系列中DMA1与DMA和另外两个外设GPIO和TIM5 。为了弄清这个问题,我们有必要先看看STM32F407的总线与存储框架图。 如下图所示: 整个系统架构由多层32位AHB总线矩阵及主从总线构成,并建立起各个主从模块间的互联访问。借助于总线矩阵,可以实
[单片机]
<font color='red'>STM32F4</font>07总线存储框架及应用设计
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved