本帖是為了記錄我把正點原子觸摸屏移植到自己做的STM板子上,移植前我是參考的野火和正點原子的觸摸屏實驗視頻教程。我自己做的板子和野火正點原子的芯片都是一樣的,都是STM32F103的芯片,但是就算芯片一樣,我移植的時候也是費了很大的勁。
我先看的是野火的觸摸屏實驗教程,可是我原理大概看懂了之后發現還是對觸摸屏實驗似懂非懂,所以我就去看了正點原子的視頻,正點原子觸摸屏實驗比野火的簡單了許多(我自己的理解),所以我就準備移植正點原子的觸摸屏實驗。我先把正點原子的觸摸屏驅動拷貝到我的工程里,我的STM開發板已經打通了液晶的驅動,我再液晶的工程上新建了一個touch文件夾里面存放了正點原子的觸摸屏驅動。對正點原子驅動的更改主要如下。
//電阻/電容屏芯片連接引腳
#define PEN PAin(8) // INT
#define DOUT PBin(14) // MISO
#define TDIN PBout(15) // MOSI
#define TCLK PBout(13) // SCLK
#define TCS PBout(12) // CS
這一步主要是更改Touch。h文件中的我自己開發板芯片連接的GPIO引腳。
//觸摸屏初始化
//返回值:0,沒有進行校準
// 1,進行過校準
u8 TP_Init(void)
{
if(lcddev_id==0X5510) //4.3寸電容觸摸屏//************************************************************************
{
return 0;
}else if(lcddev_id==0X1963) //7寸電容觸摸屏
{
return 0;
}else
{
GPIO_InitTypeDef GPIO_InitStructure;
//注意,時鐘使能之后,對GPIO的操作才有效
//所以上拉之前,必須使能時鐘.才能實現真正的上拉輸出
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE); //使能PB,PF端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; // PB1端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//B1推挽輸出
GPIO_SetBits(GPIOB,GPIO_Pin_13);//上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; // PB2端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOB, &GPIO_InitStructure);//B2上拉輸入
GPIO_SetBits(GPIOB,GPIO_Pin_14);//上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_15; // F9,PF11端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//PF9,PF11推挽輸出
GPIO_SetBits(GPIOB, GPIO_Pin_12|GPIO_Pin_15);//上拉
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; // PF10端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //上拉輸入
GPIO_Init(GPIOA, &GPIO_InitStructure);//PF10上拉輸入
GPIO_SetBits(GPIOA,GPIO_Pin_8);//上拉
TP_Read_XY(&tp_dev.x[0],&tp_dev.y[0]);//第一次讀取初始化
I2C_EE_Init(); //初始化24CXX
if(TP_Get_Adjdata())return 0;//已經校準
else //未校準?
{
LCD_Clear(White); //清屏//************************************************************************
TP_Adjust(); //屏幕校準
}
TP_Get_Adjdata();
}
return 1;
}
這里是對觸摸屏初始化修改,前面如if(lcddev_id==0X5510)等的判斷都是對液晶屏的選擇,我移植使用的是電阻屏,所以把這些都刪除了。而且lcddev_id本來是正點原子對液晶定義的結構體變量,我之前沒有使用正點原子的液晶驅動是我自己的,所以我在touch。c文件前定義了這個變量,并且直接賦值。
u16 lcddev_id = 0;
u16 lcddev_dir = 1;
其它的函數,凡是關于液晶的畫點等的都把函數改為自己的液晶驅動函數,這樣基本可以實現觸摸屏實驗了。
|