|
本帖是為了記錄我把正點(diǎn)原子觸摸屏移植到自己做的STM板子上,移植前我是參考的野火和正點(diǎn)原子的觸摸屏實(shí)驗(yàn)視頻教程。我自己做的板子和野火正點(diǎn)原子的芯片都是一樣的,都是STM32F103的芯片,但是就算芯片一樣,我移植的時(shí)候也是費(fèi)了很大的勁。
我先看的是野火的觸摸屏實(shí)驗(yàn)教程,可是我原理大概看懂了之后發(fā)現(xiàn)還是對(duì)觸摸屏實(shí)驗(yàn)似懂非懂,所以我就去看了正點(diǎn)原子的視頻,正點(diǎn)原子觸摸屏實(shí)驗(yàn)比野火的簡(jiǎn)單了許多(我自己的理解),所以我就準(zhǔn)備移植正點(diǎn)原子的觸摸屏實(shí)驗(yàn)。我先把正點(diǎn)原子的觸摸屏驅(qū)動(dòng)拷貝到我的工程里,我的STM開發(fā)板已經(jīng)打通了液晶的驅(qū)動(dòng),我再液晶的工程上新建了一個(gè)touch文件夾里面存放了正點(diǎn)原子的觸摸屏驅(qū)動(dòng)。對(duì)正點(diǎn)原子驅(qū)動(dòng)的更改主要如下。
//電阻/電容屏芯片連接引腳
#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文件中的我自己開發(fā)板芯片連接的GPIO引腳。
//觸摸屏初始化
//返回值:0,沒有進(jìn)行校準(zhǔn)
// 1,進(jìn)行過校準(zhǔn)
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;
//注意,時(shí)鐘使能之后,對(duì)GPIO的操作才有效
//所以上拉之前,必須使能時(shí)鐘.才能實(shí)現(xiàn)真正的上拉輸出
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA, ENABLE); //使能PB,PF端口時(shí)鐘
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;//已經(jīng)校準(zhǔn)
else //未校準(zhǔn)?
{
LCD_Clear(White); //清屏//************************************************************************
TP_Adjust(); //屏幕校準(zhǔn)
}
TP_Get_Adjdata();
}
return 1;
}
這里是對(duì)觸摸屏初始化修改,前面如if(lcddev_id==0X5510)等的判斷都是對(duì)液晶屏的選擇,我移植使用的是電阻屏,所以把這些都刪除了。而且lcddev_id本來是正點(diǎn)原子對(duì)液晶定義的結(jié)構(gòu)體變量,我之前沒有使用正點(diǎn)原子的液晶驅(qū)動(dòng)是我自己的,所以我在touch。c文件前定義了這個(gè)變量,并且直接賦值。
u16 lcddev_id = 0;
u16 lcddev_dir = 1;
其它的函數(shù),凡是關(guān)于液晶的畫點(diǎn)等的都把函數(shù)改為自己的液晶驅(qū)動(dòng)函數(shù),這樣基本可以實(shí)現(xiàn)觸摸屏實(shí)驗(yàn)了。
|
評(píng)分
-
查看全部評(píng)分
|