高通字库
版本 V1.0 · 更新于 2026-09-17

5. 字库驱动

芯片烧录完成后,需要在 MCU 工程中移植字库驱动,才能通过 SPI 接口读写字库芯片。本章覆盖引脚封装确认、lib/h 文件添加、gt_read_datar_dat_bat 函数实现以及字库初始化。

5.1 添加 lib 文件和 h 文件到工程

进入 \exportFonts 路径,将 gt_gui_driver.lib 文件和 gt_gui_driver.h 文件添加到工程中即可。

exportFonts 目录exportFonts 目录

由于编译器种类繁杂,添加库文件的方式均不相同,各类型编译器添加库文件的方法请自行搜索或者寻求 MCU 原厂技术支持。

5.2 实现 gt_read_data 和 r_dat_bat 驱动函数

头文件中声明了两个外部驱动函数 gt_read_datar_dat_bat,需要用户在工程中实现。

第一步:SPI 初始化

实现 gt_read_data 之前,要保证 SPI 正常初始化。SPI 初始化例程可以在 MCU 芯片原厂的官网获取。下面的代码是 STM32F407 的 SPI 初始化代码,以供参考。

void SPI1_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    SPI_InitTypeDef  SPI_InitStructure;

    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); // 使能GPIOB时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);  // 使能SPI1时钟

    // GPIOB 3,4,5初始化设置
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; // PB3~5复用功能输出
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;      // 复用功能
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;    // 推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;// 100MHz
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;      // 上拉
    GPIO_Init(GPIOB, &GPIO_InitStructure);            // 初始化

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource3, GPIO_AF_SPI1); // PB3复用为SPI1
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource4, GPIO_AF_SPI1); // PB4复用为SPI1
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource5, GPIO_AF_SPI1); // PB5复用为SPI1

    // 这里只针对SPI口初始化
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, ENABLE);  // 复位SPI1
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_SPI1, DISABLE); // 停止复位SPI1

    SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;          // 设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;      // SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;            // 串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;           // 第二个跳变沿数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;              // NSS信号由软件(SSI位)管理
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; // 波特率预分频值
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;     // 数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;               // CRC值计算的多项式
    SPI_Init(SPI1, &SPI_InitStructure);                    // 初始化外设SPIx寄存器
    SPI_Cmd(SPI1, ENABLE);                                 // 使能SPI外设
    SPI1_ReadWriteByte(0xff);                              // 启动传输
}

第二步:实现 gt_read_data 函数

gt_read_data 函数的实现可以参考导出文件夹中「03_SPI驱动\gt_read_data.c」文件。将代码移植到工程中,并替换代码中的 CS 上拉和下拉以及 SPI 收发的代码,使用用户自己的代码。

图 2-1 gt_read_data函数

第三步:9F 指令测试通信

实现 gt_read_data 函数后,可以通过发 9F 指令测试 gt_read_data 通信是否正常。具体测试代码如下:

uint8_t tmp_buf[8] = {0};
tmp_buf[0] = 0x9F;
gt_read_data(tmp_buf, 1, tmp_buf, 8);
for(uint8_t i = 0; i < 8; i++)
{
    printf("tmp_buf:%x\r\n", tmp_buf[i]);
}

检查 tmp_buf 最后接收到的数据能否在下图(图 2-1)的参考数据中找到。以下为部分型号芯片的 9F 指令实际返回数据示例:

9F 测试返回数据示例9F 测试返回数据示例

如果找不到可以通过拨打 0755-83453881 联系业务或者技术人员。

第四步:实现 r_dat_bat 函数

如果 9F 指令测试正常,下一步则开始实现 r_dat_bat 函数:

unsigned char r_dat_bat(unsigned long address, unsigned long r_data_len, unsigned char *p_rbuf)
{
#define _TX_DATA_LEN    (4)
    unsigned char tx_buf[_TX_DATA_LEN] = {0};
    tx_buf[0] = 0x03; // 读取数据的命令
    tx_buf[1] = (unsigned char)((address & 0xFF0000) >> 16);
    tx_buf[2] = (unsigned char)((address & 0x00FF00) >> 8);
    tx_buf[3] = (unsigned char)((address & 0x0000FF));
    return gt_read_data(tx_buf, _TX_DATA_LEN, p_rbuf, r_data_len);
}

5.3 调用 GT_Font_Init 函数

如果 gt_read_data 通信正常并实现了 r_dat_bat 函数,那么可以开始添加 lib 文件以及 h 文件到工程中,并进行头文件的声明,然后调用 GT_Font_Init 进行字库初始化。 编译器中库文件的添加,在keil编译器中lib文件添加方法同.c文件一致,其他的编译器添加库文件的方法各不相同,如果是其他的编译器,则需要向MCU原厂技术支持工程师询问MCU使用编译器库文件的添加方法。下面以keil为里截图说明。

注意:必须在 SPI 初始化后调用 GT_Font_Init 函数。

GT_Font_Init 调用GT_Font_Init 调用

GT_Font_Init 初始化GT_Font_Init 初始化

如果 GT_Font_Init 返回值大于 0 并且不等于 FF,表示字库初始化成功,可以正常调用字库的 API 接口函数;如果返回值不在上述范围内,说明主控与字库芯片的通信仍存在问题,请按以下步骤排查:

  1. 用逻辑分析仪分析数据,没有逻辑分析仪则用示波器检查信号是否正常;
  2. 检查 SPI 的引脚初始化是否都上拉了;
  3. 检查 SPI 的时钟频率是否过高,建议 SPI 时钟频率设置 45MHz 或以下;
  4. 检查芯片焊接是否正常,芯片 MISO 引脚和 MOSI 引脚是否连接错误等。

MISO 引脚排查MISO 引脚排查

如果上述操作都执行了,字库初始化还是返回小于或等于 0 的值,请到官网联系高通字库技术人员,联系方式:0755-83453881。