环境:


主机:WIN8


开发环境:MDK5.13


mcu: stm32f407VGIGH6


字库芯片:GT23L24M0140


说明:


GT23L24M0140是一款支持GB18030标准的字库芯片,有多种大小的字体可供选择。


本文驱动了其中常用的字体。


源代码:


drv_font.h


/*********************************************************************

*   字库芯片驱动层头文件

* (c)copyright 2013,jdh

*   All Right Reserved

*新建日期:2015/2/2 by jdh

*修改日期:2015/2/3 by jdh

**********************************************************************/

/*********************************************************************

硬件连接说明

电路标号 单片机引脚 特殊功能

SPI1_NSS          PA4 SPI1_NSS     

SPI1_MISO PA6 SPI1_MISO

SPI1_MOSI PA7 SPI1_MOSI

SPI1_SCK PA5 SPI1_SCK

**********************************************************************/

 

#ifndef _DRV_FONT_H_

#define _DRV_FONT_H_

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "stm32f4xx.h"

 

/*********************************************************************

* 函数

**********************************************************************/

 

/*********************************************************************

* 初始化字库芯片

**********************************************************************/

 

void drv_font_init(void);

 

/*********************************************************************

* 打开SPI使能

**********************************************************************/

 

void drv_font_enable(void);

 

/*********************************************************************

* 关闭SPI使能

**********************************************************************/

 

void drv_font_disable(void);

 

/*********************************************************************

* spi发送一个字节

*参数:dat:数据

*返回:spi接收到的字节

**********************************************************************/

 

uint8_t drv_font_send_byte(uint8_t dat);

 

#endif

 

 

drv_font.c


/*********************************************************************

*   字库芯片驱动层文件

* (c)copyright 2015,jdh

*   All Right Reserved

*新建日期:2015/2/2 by jdh

*修改日期:2015/2/3 by jdh

**********************************************************************/

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "drv_font.h"

 

/*********************************************************************

* 静态函数

**********************************************************************/

 

/*********************************************************************

* 初始化spi

**********************************************************************/

 

static void init_spi(void);

 

/*********************************************************************

* 函数

**********************************************************************/

 

/*********************************************************************

* 初始化字库芯片

**********************************************************************/

 

void drv_font_init(void)

{

//初始化spi

init_spi();

}

 

/*********************************************************************

* 打开SPI使能

**********************************************************************/

 

void drv_font_enable(void)

{

GPIO_ResetBits(GPIOA, GPIO_Pin_4);

}

 

/*********************************************************************

* 关闭SPI使能

**********************************************************************/

 

void drv_font_disable(void)

{

GPIO_SetBits(GPIOA, GPIO_Pin_4);

}

 

/*********************************************************************

* spi发送一个字节

*参数:dat:数据

*返回:spi接收到的字节

**********************************************************************/

 

uint8_t drv_font_send_byte(uint8_t dat)

{

while ((SPI1->SR & SPI_I2S_FLAG_TXE) == (uint16_t)RESET);

SPI1->DR = dat;

while ((SPI1->SR & SPI_I2S_FLAG_RXNE) == (uint16_t)RESET);

return (SPI1->DR);

}

 

/*********************************************************************

* 初始化spi

**********************************************************************/

 

static void init_spi(void)

{

//定义IO初始化结构体

GPIO_InitTypeDef GPIO_InitStructure ;

//定义SPI初始化结构体

SPI_InitTypeDef  SPI_InitStructure ;

 

//配置CS

//初始化时钟

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource4,GPIO_AF_SPI1);

    //管脚模式:输出口

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;

    //类型:推挽模式

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    //上拉下拉设置

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;

    //IO口速度

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

    //管脚指定

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

    //初始化

GPIO_Init(GPIOA, &GPIO_InitStructure);

//关闭使能

drv_font_disable();

 

//初始化SPI

//关闭SPI

SPI_Cmd(SPI1,DISABLE);

//初始化SPI时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

//设置IO口时钟      

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE); 

GPIO_PinAFConfig(GPIOA,GPIO_PinSource5,GPIO_AF_SPI1);  

GPIO_PinAFConfig(GPIOA,GPIO_PinSource6,GPIO_AF_SPI1);

GPIO_PinAFConfig(GPIOA,GPIO_PinSource7,GPIO_AF_SPI1);

 

    //管脚模式:输出口

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;

    //类型:推挽模式

GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

    //上拉下拉设置

GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;

//IO口速度

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;

    //管脚指定

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

    //初始化

GPIO_Init(GPIOA, &GPIO_InitStructure);

// SPI配置

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex ;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master ;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b ;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low ;

SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge ;

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft ;

//SPI波特率分频设置

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16 ;

//SPI设置成LSB模式

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB ;

SPI_InitStructure.SPI_CRCPolynomial = 7 ;

SPI_Init( SPI1, &SPI_InitStructure ) ;

 

//启动SPI

SPI_Cmd(SPI1,ENABLE);

}

 

 


inf_font.h


/*********************************************************************

* 字库芯片接口层头文件

* (c)copyright 2015,jdh

*   All Right Reserved

*新建日期:2015/2/3 by jdh

*修改日期:2015/2/5 by jdh

*修改日期:2015/2/6 by jdh

**********************************************************************/

 

#ifndef _INF_FONT_H_

#define _INF_FONT_H_

 

/*********************************************************************

* 头文件

**********************************************************************/

 

#include "drv_font.h"

 

/*********************************************************************

* 宏定义

**********************************************************************/

 

/*********************************************************************

* 字体定义

**********************************************************************/

 

/*********************************************************************

* 7*8点阵ASCII标准字符

**********************************************************************/

 

//字体

#define ASCII_7X8 1

//起始地址

#define ASCII_7X8_ADDR_BASE 0x080300

//宽,位数

#define ASCII_7X8_WIDTH 8

//高,位数

#define ASCII_7X8_HEIGHT 8

//字节数

#define ASCII_7X8_SIZE 8

 

/*********************************************************************

* 7*8点阵ASCII粗体字符

**********************************************************************/

 

//字体

#define ASCII_BOLD_7X8 2

//起始地址

#define ASCII_BOLD_7X8_ADDR_BASE 0x080600

//宽,位数

#define ASCII_BOLD_7X8_WIDTH 8

//高,位数

#define ASCII_BOLD_7X8_HEIGHT 8

//字节数

#define ASCII_BOLD_7X8_SIZE 8

 

/*********************************************************************

* 6*12点阵ASCII标准字符

**********************************************************************/

 

//字体

#define ASCII_6X12 3

//起始地址

#define ASCII_6X12_ADDR_BASE 0x080900

//宽,位数

#define ASCII_6X12_WIDTH 8

//高,位数

#define ASCII_6X12_HEIGHT 12

//字节数

#define ASCII_6X12_SIZE 12

 

/*********************************************************************

* 8*16点阵ASCII标准字符

**********************************************************************/

 

//字体

#define ASCII_8X16 4

//起始地址

#define ASCII_8X16_ADDR_BASE 0x080D80

//宽,位数

#define ASCII_8X16_WIDTH 8

//高,位数

#define ASCII_8X16_HEIGHT 16

//字节数

#define ASCII_8X16_SIZE 16

 

/*********************************************************************

* 8*16点阵ASCII粗体字符

**********************************************************************/

 

//字体

#define ASCII_BOLD_8X16 5

//起始地址

#define ASCII_BOLD_8X16_ADDR_BASE 0x081580

//宽,位数

#define ASCII_BOLD_8X16_WIDTH 8

//高,位数

#define ASCII_BOLD_8X16_HEIGHT 16

//字节数

#define ASCII_BOLD_8X16_SIZE 16

 

/*********************************************************************

* 12*24点阵ASCII标准字符

**********************************************************************/

 

//字体

#define ASCII_12X24 6

//起始地址

#define ASCII_12X24_ADDR_BASE 0x081B80

//宽,位数

#define ASCII_12X24_WIDTH 12

//高,位数

#define ASCII_12X24_HEIGHT 24

//字节数

#define ASCII_12X24_SIZE 48

 

/*********************************************************************

* 16*32点阵ASCII标准字符

**********************************************************************/

 

//字体

#define ASCII_16X32 7

//起始地址

#define ASCII_16X32_ADDR_BASE 0x082D80

//宽,位数

#define ASCII_16X32_WIDTH 16

//高,位数

#define ASCII_16X32_HEIGHT 32

//字节数

#define ASCII_16X32_SIZE 64

 

/*********************************************************************

* 16*32点阵ASCII粗体字符

**********************************************************************/

 

//字体

#define ASCII_BOLD_16X32 8

//起始地址

#define ASCII_BOLD_16X32_ADDR_BASE 0x084580

//宽,位数

#define ASCII_BOLD_16X32_WIDTH 16

//高,位数

#define ASCII_BOLD_16X32_HEIGHT 32

[1] [2] [3]
关键字:驱动字库芯片  GT23L24M0140  STM32 引用地址:驱动字库芯片GT23L24M0140

上一篇:单片机flash通用读写库:TZFlash
下一篇:stm32f4中通过dma采集adc

推荐阅读

去年中秋夜,在中国人还在欢度中秋的时候,谷歌一口气发布七款硬件,2款Pixel手机、2款智能音箱、一款笔记本电脑、一款翻译耳机、一款智能相机,来展示谷歌在人工智能时代AI+软件+硬件三维一体的思考!也展示了谷歌对智能硬件的狂热! 颇为尴尬的是,今年谷歌新品发布会还未举办,各种爆料疯起,甚至有一家香港数码店赶在了发布会前卖起了Pixel 3 XL。...
今年三月,在巴黎举办的华为P30系列发布会上,华为宣布与韩国品牌GENTLE MONSTER合作开发一款名为Eyewear智能眼镜,为正式发售预热。9月13日,华为官方宣布:全国140家门店同步正式开售。我们知道,手机哪怕是不玩也是会消耗电量,而Eyewear智能眼镜支持佩戴状态智能识别,只要摘下眼镜便能立即暂停,不会消耗电量。并且,如果配合华为EMUI10.0及以上版本...
在英伟达(Nvidia)宣布收购Arm不到一个月,AMD迅速做出反应,被爆准备以逾300亿美元收购赛灵思(Xilinx),收购工作有可能最早在下周达成协议。外媒评论认为,AMD此举有可能是应对竞争对手英特尔和英伟达做出的快速反应,并且受到近期一系列并购交易的推动。英特尔在2015年以167亿美元收购了赛灵思的主要竞争对手Altera;前不久,英伟达以400亿美元的价格...
10月7日消息,当地时间周三三星电子宣布公司新一代3纳米芯片制造技术将推迟到2022年上市,同时称更先进的2纳米芯片制造技术将在2025年问世。三星曾计划于今年开始用3纳米制程工艺生产处理速度更快、能效更高的芯片产品。周三公司在“三星代工论坛”(Samsung Foundry Forum)上表示,转向全新制造技术的难度很大,3纳米制程芯片将在2022年上半年上市。这...

史海拾趣

问答坊 | AI 解惑

1.关于PROTEL主要功能的粗略讲解

这是一款用于设计电路的软件,它主要能实现的功能有以下几条: 功能一: 画出相对比较工整漂亮的原理图,比如下面的这个样例:   功能二: 生成可以用于工厂生产的PCB制板文件。 得到PCB的方法主要有三种, 第1种:利用通过画原理图时同时产生的 ...…

查看全部问答∨

关于DD2控制器IP 核调用问题

各位老大,我今天直接调了个DDR2控制器IP核作为顶层,综合能过,加上DQ和DQS管脚约束,fitter时就报 Error: The I/O standard LVDS cannot be used on the Bidir pin mem_clk[0].双向信号不能用差分。 (使用stx3,直接用IP核作为顶层综合,未修 ...…

查看全部问答∨

关于SCSI的问题,如何编写针对scsi控制器的程序

关于SCSI的问题,如何编写针对scsi控制器的程序, 如题,谁能说下,给个例子或者说给点资料也行,现在什么都没有.…

查看全部问答∨

Samsung 2440 display + mouse bug.

在 2440 WinCE 5.0 下, 接上 mouse 時, 若按下 left button 一直不放並向右下拉時, 螢幕上會出現一個虛線邊的方框, 此時 button 不要放再繼續往左上拉回時, 螢幕會出現 cursor 移動的軌跡. 這個問題在 Samsung 2440 WinCE5, Freescale i.MX27, i.M ...…

查看全部问答∨

TCP/IP 发送文件只能收到第一个字符问题

今天在EVC上改了一个TCP/IP的程序 目的是把打开一个文件 把内容显示到编辑框里 然后发送到PC上 在大家的帮助下 功能基本实现了 现在的情况是显示  Read OK  但没显示到编辑框里 这还是其次 因为可以发送了 但问题主要是只能发 ...…

查看全部问答∨

硬件

请问,现在学网络硬件,因为学校没有足够的硬件让我们去实践,都是在虚拟机上完成的,这样出去的学生会有人要吗?…

查看全部问答∨

8259a相关问题

  请问在操作系统初始化8259a以后,是否写入了icw1-4和ocw1-2(当然视有否级联做相应的修改),那如果我在初始化以后还向修改相关字(控制字等)该如何做呢,直接写吗?初始化的时候是按照顺序填入的,那如果是直接写的话又无顺序的呢?只 ...…

查看全部问答∨

TPS2350 使用

 TPS2350 使用TPS2350做电源的热插拔控制,问题:在做热插拔验证中经常会出现导致工作着的电源板关闭所控制的电源输入,经测试在TPS2350的8#;9#和11#脚上会出现比较大的足以关闭MOSFET管的干扰脉冲信号。问:应该怎样解决?谢谢!…

查看全部问答∨

求命啊大侠们,关于2812的CMD文件

这个是CMD文件中的一段    .const: load =  FLASHB PAGE 0, run = RAML0L1 PAGE 1 {     /* Get Run Address */     __co ...…

查看全部问答∨

学习ARM体系结构的意义--武汉华嵌李磊老师

  时常有些同学会问,在嵌入式开发中用得最多的是什么?我答,是C语言。那么最复杂的是什么?是嵌入式操作系统。只有Bootloader主要用到体系结构的知识吗?嗯,那当然。写Bootloader似乎也太麻烦了点,这要怎么开始啊?没有人要求你从车 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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