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。

