正在学习探索者F4开发板中4.3寸触摸屏操作,驱动芯片是GT9147。看了例程后觉得程序有点乱,书写风格不符合自己的审美观。把例程烧进单片机后运行,发现触摸灵敏度不行,经常按下几次都没有反应。综上,决定自己重新编写这个驱动,我是菜鸟,花了将近两天时间。对自己编写的驱动程序进行了一些测试,结果良好,挺开心的。现共享出驱动源码,大家一起讨论下,望指正。由于系统原因,复制到帖子上的源码格式稍乱,大家可以下载下来。
/****************************************************
* 文 件 名:
* 描 述:GT9147操作文件
* 作 者:YouDream
* 编写时间:2015.02.04
* 说 明:在探索者STM32F4开发平台试验通过
引用请说明出处
*****************************************************/
#ifndef _GT9147_H
#define _GT9147_H
/*********************头文件包含*********************/
#include "stm32f4xx.h"
#include "BitBand.h"
#include "Delay.h"
/********端口模式寄存器设置,PF11设置为输入模式*******/
#define GT9147_SDA_SetAsIntput() {
GPIOF->MODER &= ~(3 << (11 * 2));
GPIOF->MODER |= 0 << (11 * 2);
}
/******端口模式寄存器设置,PF11设置为通用输出模式******/
#define GT9147_SDA_SetAsOutput() {
GPIOF->MODER &= ~(3 << (11 * 2));
GPIOF->MODER |= 1 << (11 * 2);
}
/*********************IO操作函数*********************/
#define GT9147_RST GPIOC_UAOPin(13) //用在输出模式
#define GT9147_SCL GPIOB_UAOPin(0) //用在输出模式
#define GT9147_SDA GPIOF_UAOPin(11) //用在输出模式
#define GT9147_SDA_Read GPIOF_UAIPin(11) //用在输入模式
#define GT9147_INT GPIOB_UAIPin(1) //用在输入模式
/***************GT9147 Device Address****************/
#define GT9147_DevAdr0 0x28 //最低位是读写控制位,按位或0x01则读,按位与0xfe则写
/*
#define GT9147_DevAdr1 0xBA //最低位是读写控制位,按位或0x01则读,按位与0xfe则写
*/
/******************GT9147寄存器地址*******************/
#define GT9147_ConfigMsgReg 0x8047 //GT9147配置信息寄存器起始地址
#define GT9147_ProductIDReg 0x8140 //GT9147产品ID寄存器地址
#define GT9147_TouchStateReg 0X814E //GT9147当前触摸情况寄存器地址
#define GT9147_TouchPoint1Reg 0X8150 //GT9147触摸点1寄存器起始地址
#define GT9147_TouchPoint2Reg 0X8158 //GT9147触摸点2寄存器起始地址
#define GT9147_TouchPoint3Reg 0X8160 //GT9147触摸点3寄存器起始地址
#define GT9147_TouchPoint4Reg 0X8168 //GT9147触摸点4寄存器起始地址
#define GT9147_TouchPoint5Reg 0X8170 //GT9147触摸点5寄存器起始地址
//触摸点相关数据结构体定义
typedef struct
{
uint8_t TouchSta; //触摸情况,bit7-bit5:保留;bit4-bit0触摸点按下有效标志,有效为1,分别对应触摸点5-1;
uint16_t x[5]; //支持5点触摸,需要使用5组坐标存储触摸点数据
uint16_t y[5];
}TouchPointRefTypeDef;
//声明一个TouchPointRefTypeDef类型的结构体
extern TouchPointRefTypeDef TPR_Structure;
/********************外部函数声明********************/
extern void GT9147_WrNByte(uint8_t Daddr,uint16_t Waddr,uint8_t a[],uint8_t n);
extern void GT9147_RdNByte(uint8_t Daddr,uint16_t Waddr,uint8_t a[],uint8_t n);
extern void GT9147_SendConfigMSG(uint8_t cmd);
extern void GT9147_Init(void);
extern void GT9147_Scan(void);
#endif
/*********************End of File********************/ |