高通字库
版本 V1.3 · 更新于 2026-08-17

4.1.添加lib文件和h文件到工程

打开文件夹“04_字库API使用”,将lib文件和h文件添加到工程中即可。由于编译器种类繁杂,添加库文件的方式均不相同,各类型编译器添加库文件的方法请自行百度或者寻求MCU原厂技术支持。

4.2.实现gt_read_data字库驱动函数

实现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单向或者双向的数据模式:SPI设置为双线双向全双工
    SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
    //设置SPI工作模式:设置为主SPI
    SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
    //设置SPI的数据大小:SPI发送接收8位帧结构
    SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;
    //串行同步时钟的空闲状态为高电平
    SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;
    //串行同步时钟的第二个跳变沿(上升或下降)数据被采样
    SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
    //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号有SSI位控制
    SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
    //定义波特率预分频的值:波特率预分频值为256
    SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
    //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始
    SPI_InitStructure.SPI_CRCPolynomial = 7;    //CRC值计算的多项式
    SPI_Init(SPI1, &SPI_InitStructure);
    //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器
    SPI_Cmd(SPI1, ENABLE); //使能SPI外设
    SPI1_ReadWriteByte(0xff);//启动传输
}

然后再实现gt_read_data函数,该函数的实现可以参考文件夹“03_SPI驱动\gt_read_data.c”文件。将代码移植到工程中,并替换代码中的CS上拉和下拉以及SPI收发的代码,使用用户的代码。

实现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的参考的数据中找到,如果找不到可以通过拨打0755-83453881联系业务或者技术人员。

图2-1

如果9F指令测试正常,但GT_Font_Init函数返回0或者ff,首先看芯片丝印,是否小于2240,小于2240则需要参考1.1的处理方式联系高通技术人员,如果大于2240则需要使用读取验证数据的方式来验证,验证函数为

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);
}
r_dat_bat(0xC0,16,DZ_Data);// 核对"03_SPI驱动\spi_模拟时序参考代码.txt"里面的字库型号对应的数据,一般地址为C0或者2C0,如果和型号后面的数据对的上则表示SPI通信正常,如果对不上则需要找MCU原厂帮忙调试SPI驱动

4.3.调用GT_Font_Init函数

如果gt_read_data通信正常,那么可以开始添加lib文件以及h文件到工程中,并进行头文件的声明,然后调用GT_Font_Init进行字库初始化。注意:必须在SPI初始化后调用GT_Font_Init函数。

如果GT_Font_Init返回值大于0表示字库初始化成功,可以正常调用字库的API接口函数;如果返回值小于或等于0,说明主控与字库芯片的通信仍存在问题。可以再执行以下代码进行再次验证Spi通信是否正常。

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);
}
r_dat_bat(0xC0,16,DZ_Data);//根据"03_SPI驱动\spi_模拟时序参考代码.txt"里面的字库型号,读C0地址或者2C0地址进行验证,如果和型号后面的数据对的上则表示SPI通信正常,如果对不上则需要找MCU原厂帮忙调试SPI驱动

r_dat_bat(0xC0,16,DZ_Data); 读取对应验证地址16个字节的数据,核对"03_SPI驱动\spi_模拟时序参考代码.txt"里面的字库型号对应的数据,一般地址为C0或者2C0,如果和型号后面的数据对的上则表示SPI通信正常,如果对不上则需要找MCU原厂帮忙调试SPI驱动 如果以上都没有问题,则用逻辑分析仪分析数据,没有逻辑分析仪则用示波器检查信号是否正常,再检查SPI的引脚初始化是否都上拉了;检查SPI的时钟频率是否过高,建议SPI时钟频率设置45MHz或以下。检查芯片焊接是否正常,芯片MISO引脚和MISO引脚是否连接错误等,如果上述的操作都执行了,字库初始化还是返回小于或等于0的值,请到官网联系高通字库技术人员。联系方式0755-83453881。