那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何添加觸摸屏驅(qū)動(dòng)到TouchGFX中?

嵌入式攻城獅 ? 來源:嵌入式攻城獅 ? 2023-10-09 14:41 ? 次閱讀

使用STM32CubeMX移植TouchGFX一文中介紹了如何用TouchGFX點(diǎn)亮屏幕,但是此時(shí)屏幕還沒有觸摸的功能。下面將介紹如何添加觸摸屏驅(qū)動(dòng)到TouchGFX中

1. STM32CubeMX配置

在使用STM32CubeMX移植TouchGFX文中的STM32CubeMX配置基礎(chǔ)上,再激活一個(gè)定時(shí)器,用來給IIC通信提供微秒(us)延時(shí)。本文通過軟件來模擬IIC通信,因此不使用STM32CubeMX來進(jìn)行IIC配置

b91216f6-666c-11ee-939d-92fbcf53809c.png

2.KEIL中添加觸摸芯片驅(qū)動(dòng)

本文中的RGB (800 * 480)屏觸摸驅(qū)動(dòng)IC為FT5206芯片,該驅(qū)動(dòng)芯片通過 4 根線與外部連接:CT_RST(PI8), CT_INT(PH7), CT_SDA(PI3), CT_SCL(PH6)。由于通過軟件來模擬IIC通信,因此不使用STM32CubeMX來進(jìn)行配置

2.1添加微秒延時(shí)函數(shù)

在自動(dòng)生成的tim.c文件中添加微秒延時(shí)函數(shù),并在tim.h中聲明

voiddelay_us(uint16_tus)
{
uint16_tdiffer=0xffff-us-5;
__HAL_TIM_SET_COUNTER(&htim6,differ);
HAL_TIM_Base_Start(&htim6);

while(differ

2.2軟件模擬IIC通信

IIC通信頭文件:在工程中添加IIC通信頭文件ctiic.h

#ifndef__CT_IIC_H
#define__CT_IIC_H

#include"main.h"

#defineIIC_SDA_PORTGPIOI
#defineIIC_SDA_PINGPIO_PIN_3

#defineIIC_SCL_PORTGPIOH
#defineIIC_SCL_PINGPIO_PIN_6

#defineSET_SDA_PIN_HHAL_GPIO_WritePin(IIC_SDA_PORT,IIC_SDA_PIN,GPIO_PIN_SET)
#defineSET_SDA_PIN_LHAL_GPIO_WritePin(IIC_SDA_PORT,IIC_SDA_PIN,GPIO_PIN_RESET)

#defineSET_SCL_PIN_HHAL_GPIO_WritePin(IIC_SCL_PORT,IIC_SCL_PIN,GPIO_PIN_SET)
#defineSET_SCL_PIN_LHAL_GPIO_WritePin(IIC_SCL_PORT,IIC_SCL_PIN,GPIO_PIN_RESET)


voidSET_SDA_DIR_OUT(void);
voidSET_SDA_DIR_IN(void);
uint8_tREAD_IIC_SDA(void);
voidWRITE_IIC_SDA(uint8_tstate);

voidIIC_Init(void);
voidIIC_Start(void);
voidIIC_Stop(void);
uint8_tIIC_Wait_Ack(void);
voidIIC_Ack(void);
voidIIC_NAck(void);
voidIIC_Send_Byte(uint8_ttxd);
uint8_tIIC_Read_Byte(unsignedcharack);

#endif
IIC通信源文件:在工程中添加IIC通信源文件ctiic.c
#include"ctiic.h"
#include"tim.h"

voidSET_SDA_DIR_OUT(void)
{
 GPIO_InitTypeDefGPIO_Initure;

GPIO_Initure.Pin=IIC_SDA_PIN;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH;

HAL_GPIO_Init(IIC_SDA_PORT,&GPIO_Initure);
}

voidSET_SDA_DIR_IN(void)
{
 GPIO_InitTypeDefGPIO_Initure;

GPIO_Initure.Pin=IIC_SDA_PIN;
GPIO_Initure.Mode=GPIO_MODE_INPUT;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH;

HAL_GPIO_Init(IIC_SDA_PORT,&GPIO_Initure);
}

uint8_tREAD_IIC_SDA(void)
{
 returnHAL_GPIO_ReadPin(IIC_SDA_PORT,IIC_SDA_PIN);
}

voidWRITE_IIC_SDA(uint8_tstate)
{
 HAL_GPIO_WritePin(IIC_SDA_PORT,IIC_SDA_PIN,state);
}

voidIIC_Init()
{
 GPIO_InitTypeDefGPIO_Initure;
 __HAL_RCC_GPIOI_CLK_ENABLE();
 __HAL_RCC_GPIOH_CLK_ENABLE();

GPIO_Initure.Pin=IIC_SCL_PIN;
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;
GPIO_Initure.Pull=GPIO_PULLUP;
GPIO_Initure.Speed=GPIO_SPEED_HIGH;
HAL_GPIO_Init(IIC_SCL_PORT,&GPIO_Initure);

 GPIO_Initure.Pin=IIC_SDA_PIN;
HAL_GPIO_Init(IIC_SDA_PORT,&GPIO_Initure);

 SET_SDA_PIN_H;
 SET_SCL_PIN_H;
}

voidIIC_Start()
{
 SET_SDA_DIR_OUT();
 SET_SDA_PIN_H;
 SET_SCL_PIN_H;
 delay_us(30);
 SET_SDA_PIN_L;
 delay_us(2);
 SET_SCL_PIN_L;
}

voidIIC_Stop(void)
{
 SET_SDA_DIR_OUT();
 SET_SCL_PIN_L;
 SET_SDA_PIN_L;
 delay_us(30);
 SET_SCL_PIN_H;
 delay_us(2);
 SET_SDA_PIN_H;
}

uint8_tIIC_Wait_Ack(void)
{
 uint8_tucErrTime=0;
 SET_SDA_DIR_IN();
 SET_SDA_PIN_H;
 SET_SCL_PIN_H;
 delay_us(2);
 while(READ_IIC_SDA()){
 ucErrTime++;
 if(ucErrTime>250){
 IIC_Stop();
 return1;
 }
 delay_us(2);
 }
 SET_SCL_PIN_L;
 return0;
}

voidIIC_Ack(void)
{
 SET_SCL_PIN_L;
 SET_SDA_DIR_OUT();
 SET_SDA_PIN_L;
 delay_us(2);
 SET_SCL_PIN_H;
 delay_us(2);
 SET_SCL_PIN_L;
}

voidIIC_NAck(void)
{
 SET_SCL_PIN_L;
 SET_SDA_DIR_OUT();
 SET_SDA_PIN_H;
 delay_us(2);
 SET_SCL_PIN_H;
 delay_us(2);
 SET_SCL_PIN_L;
}

voidIIC_Send_Byte(uint8_ttxd)
{
uint8_tt;
 SET_SDA_DIR_OUT();
 SET_SCL_PIN_L;
 for(t=0;t<8;t++){??????????????
????WRITE_IIC_SDA((txd&0x80)>>7);
txd<<=?1;?
 ?? delay_us(2);???????
 ? ?SET_SCL_PIN_H;
? ??delay_us(2);
? ??SET_SCL_PIN_L;
?  ?delay_us(2);?
??}??
}?

uint8_t?IIC_Read_Byte(unsigned?char?ack)
{
? uint8_t?i,receive?=?0;
 ?SET_SDA_DIR_IN();
 ?delay_us(30);
 ?for(i=0;i<8;i++?)
 ?{?
?  ?SET_SCL_PIN_L;
?  ?delay_us(2);
  ??SET_SCL_PIN_H;??
  ??receive?<<=?1;
  ??if(READ_IIC_SDA())
   ???receive++;?
  ??delay_us(2);?
?}????????
?if?(!ack)
?? IIC_NAck();
?else?
?? IIC_Ack();???
?return?receive;
}?

2.3 FT5206芯片驅(qū)動(dòng)

在工程中添加FT5206芯片驅(qū)動(dòng)頭文件ft5206.h

#ifndef__FT5206_H
#define__FT5206_H

#include"ctiic.h"

#defineFT_CMD_WR0X70
#defineFT_CMD_RD0X71

#defineFT_DEVIDE_MODE0x00
#defineFT_REG_NUM_FINGER0x02

#defineFT_TP1_REG0X03
#defineFT_TP2_REG0X09
#defineFT_TP3_REG0X0F
#defineFT_TP4_REG0X15
#defineFT_TP5_REG0X1B

#defineFT_ID_G_LIB_VERSION0xA1
#defineFT_ID_G_MODE0xA4
#defineFT_ID_G_THGROUP0x80
#defineFT_ID_G_PERIODACTIVE0x88

#defineTOUCH_MAX_NUM5

typedefstruct
{
uint8_ttouch_type;
uint8_tdir;//0表示豎屏,1表示橫屏
uint16_tpix_w;
uint16_tpix_h;
uint8_ttouch_num;
uint16_tx[TOUCH_MAX_NUM];
uint16_ty[TOUCH_MAX_NUM];
}TouchTypedef;

uint8_tFT5206_WR_Reg(uint16_treg,uint8_t*buf,uint8_tlen);
voidFT5206_RD_Reg(uint16_treg,uint8_t*buf,uint8_tlen);
voidFT5206_Init(void);
uint8_tFT5206_Scan(TouchTypedef*touch);

#endif

在工程中添加FT5206芯片驅(qū)動(dòng)文件ft5206.c

#include"ft5206.h"
#include"stdio.h"

staticconstuint16_tFT5206_TPX_TBL[5]={FT_TP1_REG,FT_TP2_REG,FT_TP3_REG,FT_TP4_REG,FT_TP5_REG};

uint8_tFT5206_WR_Reg(uint16_treg,uint8_t*buf,uint8_tlen)
{
uint8_ti;
uint8_tret=0;
IIC_Start();
IIC_Send_Byte(FT_CMD_WR);
IIC_Wait_Ack();
IIC_Send_Byte(reg&0XFF);
IIC_Wait_Ack();
for(i=0;itouch_num=touch_num;
if((touch_num&0XF)&&((touch_num&0XF)<6))
?{
??for(i?=?0;idir){
y=((uint16_t)(buf[0]&0X0F)<<8)+buf[1];
????x?=?((uint16_t)(buf[2]&0X0F)<<8)+buf[3];
???}else{
???x?=?touch->pix_h-(((uint16_t)(buf[0]&0X0F)<<8)+buf[1]);
????y?=?((uint16_t)(buf[2]&0X0F)<<8)+buf[3];
???}
???touch->x[i]=x;
touch->y[i]=y;
}
}else{
touch->touch_num=0;
return0;
}
returntouch_num;
}

2.4將觸摸驅(qū)動(dòng)添加到TouchGFX中

將觸摸驅(qū)動(dòng)添加到觸摸控制文件STM32TouchController.cpp中

#include

extern"C"{
#include"ft5206.h"
}

TouchTypedefmtouch;

voidSTM32TouchController::init()
{
FT5206_Init();
mtouch.dir=1;
mtouch.pix_w=800;
mtouch.pix_h=480;
}

boolSTM32TouchController::sampleTouch(int32_t&x,int32_t&y)
{
if(FT5206_Scan(&mtouch)){
x=mtouch.x[0];
y=mtouch.y[0];
returntrue;
}
returnfalse;
}

3.TouchGFX Designer中添加點(diǎn)擊事件

在TouchGFX Designer中,創(chuàng)建一個(gè)按鈕,實(shí)現(xiàn)點(diǎn)擊后背景變色的功能 添加一個(gè)圖標(biāo)按鈕,同時(shí)添加一個(gè)box作為背景

b92acb42-666c-11ee-939d-92fbcf53809c.png

添加交互動(dòng)作:實(shí)現(xiàn)點(diǎn)擊圖標(biāo)按鈕,背景顏色由黑色變?yōu)榘咨?/p>

b94791b4-666c-11ee-939d-92fbcf53809c.png

點(diǎn)擊Generate Code生成TouchGFX代碼

4.下載測(cè)試

回到Keil工程中,編譯無誤后,下載到開發(fā)板中。點(diǎn)擊屏幕上的按鈕,若屏幕背景色由黑色變?yōu)榘咨f明點(diǎn)擊成功,觸摸驅(qū)動(dòng)添加成功

b95e6510-666c-11ee-939d-92fbcf53809c.png ? ?







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 觸摸屏
    +關(guān)注

    關(guān)注

    42

    文章

    2316

    瀏覽量

    116765
  • 定時(shí)器
    +關(guān)注

    關(guān)注

    23

    文章

    3255

    瀏覽量

    115369
  • TouchGFX
    +關(guān)注

    關(guān)注

    1

    文章

    42

    瀏覽量

    13283
  • stm32cubemx
    +關(guān)注

    關(guān)注

    5

    文章

    284

    瀏覽量

    15002
  • IIC通信
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    3056

原文標(biāo)題:TouchGFX界面開發(fā) | 添加觸摸屏驅(qū)動(dòng)

文章出處:【微信號(hào):嵌入式攻城獅,微信公眾號(hào):嵌入式攻城獅】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TouchGFX開發(fā)(2)----觸摸屏幕組件點(diǎn)亮LED

    了解如何使用 TouchGFX 配置屏幕,添加觸摸按鈕,并通過按鈕控制板載 LED 的狀態(tài)。
    的頭像 發(fā)表于 11-09 15:25 ?1488次閱讀
    <b class='flag-5'>TouchGFX</b>開發(fā)(2)----<b class='flag-5'>觸摸屏</b>幕組件點(diǎn)亮LED

    C8051F020觸摸屏驅(qū)動(dòng)控制

    C8051F020觸摸屏驅(qū)動(dòng)控制 目前觸摸屏和液晶已成為嵌入式計(jì)算機(jī)系統(tǒng)常用的輸入輸出設(shè)備。觸摸屏分為電阻、電容、表面聲波、紅外線掃描和
    發(fā)表于 11-11 09:22 ?1732次閱讀
    C8051F020<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅(qū)動(dòng)</b>控制

    電阻式觸摸屏,什么是電阻式觸摸屏

    電阻式觸摸屏,什么是電阻式觸摸屏   這種觸摸屏利用壓力感應(yīng)進(jìn)行控制。電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電
    發(fā)表于 03-24 11:02 ?5958次閱讀

    觸摸屏的性能有哪些?

    觸摸屏的性能有哪些? 觸摸屏的性能比較     電阻式觸摸屏工作在與外界完全隔離的環(huán)境
    發(fā)表于 03-24 11:12 ?1535次閱讀

    什么是電容觸摸屏

    什么是電容觸摸屏 電容觸摸屏圖片 電容觸摸屏的英文名稱the introduction of Capa
    發(fā)表于 04-30 08:54 ?2437次閱讀

    LPC4353 TouchGFX

    LPC4353 TouchGFX觸摸屏代碼。
    發(fā)表于 03-17 08:18 ?15次下載

    組態(tài)王和觸摸屏哪個(gè)好_組態(tài)王和觸摸屏區(qū)別

    現(xiàn)在組態(tài)軟件和觸摸屏都是市場(chǎng)上邊較成熟的產(chǎn)品,組態(tài)軟件的出現(xiàn)并沒有取代觸摸屏觸摸屏觸摸屏的優(yōu)勢(shì),組態(tài)軟件有組態(tài)軟件的特點(diǎn)。組態(tài)軟件和觸摸屏
    發(fā)表于 11-29 17:11 ?3.5w次閱讀

    Linux下的觸摸屏驅(qū)動(dòng)

    對(duì)于觸摸屏驅(qū)動(dòng),我們主要需要掌握觸摸屏驅(qū)動(dòng)代碼和應(yīng)用層測(cè)試代碼。下面講的是基于Mini2440的觸摸屏驅(qū)
    發(fā)表于 04-26 14:45 ?2550次閱讀

    Android4.2觸摸屏驅(qū)動(dòng)與4.0有哪些不同

    本文檔的主要內(nèi)容詳細(xì)介紹的是Android4.2觸摸屏驅(qū)動(dòng)與Android4.0觸摸屏驅(qū)動(dòng)的差別。
    發(fā)表于 07-29 17:36 ?1次下載
    Android4.2<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅(qū)動(dòng)</b>與4.0有哪些不同

    觸摸屏電容原理_觸摸屏有哪些應(yīng)用領(lǐng)域

    觸摸屏是目前最友好的計(jì)算機(jī)用戶接口界面,在消費(fèi)電子產(chǎn)品的應(yīng)用越來越廣泛,觸摸檢測(cè)好裝置和觸摸屏控制器,觸摸屏裝置過程對(duì)檢測(cè)裝置的機(jī)械結(jié)構(gòu)造
    發(fā)表于 06-26 16:59 ?2634次閱讀

    如何在TouchGFX框架下實(shí)現(xiàn)校準(zhǔn)電阻觸摸屏?

    電阻觸摸屏 3. 校準(zhǔn)添加 電阻式觸摸屏在實(shí)際應(yīng)用必須進(jìn)行校準(zhǔn),而校準(zhǔn)有多種方法,一種是使用TouchGFX自帶的
    的頭像 發(fā)表于 01-21 10:14 ?4663次閱讀
    如何在<b class='flag-5'>TouchGFX</b>框架下實(shí)現(xiàn)校準(zhǔn)電阻<b class='flag-5'>觸摸屏</b>?

    觸摸屏電容的原理,觸摸屏有哪些應(yīng)用領(lǐng)域

    瑞翔數(shù)碼觸摸屏電容原理 觸摸屏是目前最友好的計(jì)算機(jī)用戶接口界面,在消費(fèi)電子產(chǎn)品的應(yīng)用越來越廣泛,觸摸檢測(cè)好裝置和觸摸屏控制器,
    發(fā)表于 03-18 17:24 ?3124次閱讀

    觸摸屏軟件如何添加圖片

    觸摸屏軟件添加圖片方法擴(kuò)展標(biāo)準(zhǔn)庫的應(yīng)用方法。電腦上找到觸摸屏編程軟件 CoolMayHMI 的安裝路徑,默認(rèn)安裝在 C 盤;
    發(fā)表于 05-07 14:47 ?0次下載

    基于 TouchGFX 生成的代碼添加觸摸功能的方法

    基于 TouchGFX 生成的代碼添加觸摸功能的方法
    的頭像 發(fā)表于 10-27 09:21 ?909次閱讀
    基于 <b class='flag-5'>TouchGFX</b> 生成的代碼<b class='flag-5'>中</b><b class='flag-5'>添加</b><b class='flag-5'>觸摸</b>功能的方法

    電容觸摸屏原理 電容觸摸屏和電阻觸摸屏有什么區(qū)別

    電容觸摸屏和電阻觸摸屏是兩種常見的觸摸屏技術(shù),它們?cè)谠怼⒔Y(jié)構(gòu)和應(yīng)用方面都有很大的區(qū)別。下面將詳細(xì)介紹電容觸摸屏的原理、結(jié)構(gòu)和特點(diǎn),并與電阻觸摸屏
    的頭像 發(fā)表于 01-22 16:13 ?5417次閱讀
    百家乐官网博娱乐平台| 日博娱乐城开户| 金彩百家乐官网的玩法技巧和规则 | 百家乐游戏机路法| 百家乐官网网真人真钱群| 黄金城百家乐手机用户| 百家乐官网如何打公式| 新西兰百家乐的玩法技巧和规则 | 通化大嘴棋牌官方下载| 帝王百家乐新足球平台| 皇冠百家乐官网客户端皇冠| 幸运水果机游戏| 百家乐官网园好又多| 新宝百家乐官网网址| 百家乐天下| 实战百家乐官网十大取胜原因百分百战胜百家乐官网不买币不吹牛只你能做到按我说的.百家乐官网基本规则 | 百家乐桌颜色可定制| 百家乐官网信誉平台开户| 大发888线上娱乐城| 真人百家乐什么平台| 注册百家乐官网送彩金| 中国德州扑克比赛| 百家乐赌博代理合作| 金殿百家乐官网的玩法技巧和规则 | 金冠百家乐官网的玩法技巧和规则| 明升m88| 百家乐翻天电影| 百家乐游戏分析| 百家乐官网经典路单| 大发888官网df888esbgfwz| 太阳城百家乐168| 三公百家乐官网玩法| 拉孜县| 大发888注册奖金| 新奥博百家乐娱乐城| 传奇百家乐官网的玩法技巧和规则 | 澳门百家乐官网路单怎么看| 永利高| 德州百家乐21点桌| 366百家乐娱乐城| 最佳场百家乐官网的玩法技巧和规则 |