环境:
主机: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
上一篇:单片机flash通用读写库:TZFlash
下一篇:stm32f4中通过dma采集adc
推荐阅读
史海拾趣
在1936年至1962年期间,Cornell Dubilier公司在汉密尔顿工业园运营,专门制造电子零件和组件。然而,在这一时期,公司在生产过程中使用了含有多氯联苯(PCB)和其他有害物质的材料,并将其直接倾倒在现场土壤中。这一行为导致了严重的环境污染问题,使得该场地在后续被众多商业企业占据后,仍面临着环境保护的挑战。
随着公司业务的不断拓展,Daniel Woodhead公司意识到人才是企业发展的核心。因此,公司加大了对研发团队的投入,引进了一批业界顶尖的技术人才。这些人才的加入不仅为公司带来了更多的创新思路,还提高了整体的技术水平。在团队的共同努力下,公司不断推出具有竞争力的新产品,进一步巩固了市场地位。
Avalon Photonics的创立源于一次技术突破。创始人Dr. Smith在光子学领域有着深厚的学术背景,他成功研发出了一种新型的光子探测器,具有极高的灵敏度和稳定性。这一创新技术迅速引起了业界的关注。Dr. Smith看到了商业化的潜力,于是决定成立Avalon Photonics,将这项技术转化为实际产品。初创期的Avalon面临着资金短缺和市场认知度低的挑战,但凭借着技术优势和团队的努力,逐渐在市场上站稳脚跟。
在追求经济效益的同时,Advanced Electronic Packaging公司始终关注企业社会责任和可持续发展。公司积极采用环保材料和生产工艺,减少生产过程中的能源消耗和环境污染。此外,公司还积极参与社会公益活动,为当地社区提供就业机会和培训支持。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。
这些故事只是Advanced Electronic Packaging公司发展过程中的一部分,它们共同展现了公司在电子行业中的成长轨迹和取得的成就。未来,随着科技的不断进步和市场需求的不断变化,相信Advanced Electronic Packaging公司将继续保持创新精神,为电子行业的发展贡献更多力量。
随着科技的不断发展,Electech Electronics意识到仅仅依赖电子元器件的代理和销售已经无法满足市场的需求。于是,公司开始投入研发,专注于电子产品的设计和制造。经过数年的努力,Electech Electronics成功开发出一系列具有竞争力的电子产品,如智能控制模块、高精度传感器等。这些产品的推出不仅拓宽了公司的产品线,也提升了公司的市场竞争力。
随着EnerChip技术的不断完善和市场的认可,CYMBET公司开始积极拓展市场,与全球各地的合作伙伴建立了紧密的合作关系。例如,CYMBET与Digi-Key Corporation签订了全球经销协议,通过Digi-Key的广泛分销网络,EnerChip系列固态可充电薄膜电池及能量采集储能模块得以迅速进入全球市场。此外,CYMBET还与多家知名电子设备制造商建立了长期合作关系,共同开发新产品,推动电子行业的发展。
这是一款用于设计电路的软件,它主要能实现的功能有以下几条: 功能一: 画出相对比较工整漂亮的原理图,比如下面的这个样例: 功能二: 生成可以用于工厂生产的PCB制板文件。 得到PCB的方法主要有三种, 第1种:利用通过画原理图时同时产生的 ...… 查看全部问答∨ |
各位老大,我今天直接调了个DDR2控制器IP核作为顶层,综合能过,加上DQ和DQS管脚约束,fitter时就报 Error: The I/O standard LVDS cannot be used on the Bidir pin mem_clk[0].双向信号不能用差分。 (使用stx3,直接用IP核作为顶层综合,未修 ...… 查看全部问答∨ |
Samsung 2440 display + mouse bug. 在 2440 WinCE 5.0 下, 接上 mouse 時, 若按下 left button 一直不放並向右下拉時, 螢幕上會出現一個虛線邊的方框, 此時 button 不要放再繼續往左上拉回時, 螢幕會出現 cursor 移動的軌跡. 這個問題在 Samsung 2440 WinCE5, Freescale i.MX27, i.M ...… 查看全部问答∨ |
|
今天在EVC上改了一个TCP/IP的程序 目的是把打开一个文件 把内容显示到编辑框里 然后发送到PC上 在大家的帮助下 功能基本实现了 现在的情况是显示 Read OK 但没显示到编辑框里 这还是其次 因为可以发送了 但问题主要是只能发 ...… 查看全部问答∨ |
|
TPS2350 使用TPS2350做电源的热插拔控制,问题:在做热插拔验证中经常会出现导致工作着的电源板关闭所控制的电源输入,经测试在TPS2350的8#;9#和11#脚上会出现比较大的足以关闭MOSFET管的干扰脉冲信号。问:应该怎样解决?谢谢!… 查看全部问答∨ |
|
这个是CMD文件中的一段 .const: load = FLASHB PAGE 0, run = RAML0L1 PAGE 1 { /* Get Run Address */ __co ...… 查看全部问答∨ |
时常有些同学会问,在嵌入式开发中用得最多的是什么?我答,是C语言。那么最复杂的是什么?是嵌入式操作系统。只有Bootloader主要用到体系结构的知识吗?嗯,那当然。写Bootloader似乎也太麻烦了点,这要怎么开始啊?没有人要求你从车 ...… 查看全部问答∨ |