在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何添加觸摸屏驅動到TouchGFX中?

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

使用STM32CubeMX移植TouchGFX一文中介紹了如何用TouchGFX點亮屏幕,但是此時屏幕還沒有觸摸的功能。下面將介紹如何添加觸摸屏驅動到TouchGFX中

1. STM32CubeMX配置

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

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

2.KEIL中添加觸摸芯片驅動

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

2.1添加微秒延時函數

在自動生成的tim.c文件中添加微秒延時函數,并在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芯片驅動

在工程中添加FT5206芯片驅動頭文件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芯片驅動文件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將觸摸驅動添加到TouchGFX中

將觸摸驅動添加到觸摸控制文件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中添加點擊事件

在TouchGFX Designer中,創建一個按鈕,實現點擊后背景變色的功能 添加一個圖標按鈕,同時添加一個box作為背景

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

添加交互動作:實現點擊圖標按鈕,背景顏色由黑色變為白色

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

點擊Generate Code生成TouchGFX代碼

4.下載測試

回到Keil工程中,編譯無誤后,下載到開發板中。點擊屏幕上的按鈕,若屏幕背景色由黑色變為白色,說明點擊成功,觸摸驅動添加成功

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







審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 觸摸屏
    +關注

    關注

    42

    文章

    2335

    瀏覽量

    117594
  • 定時器
    +關注

    關注

    23

    文章

    3270

    瀏覽量

    116466
  • TouchGFX
    +關注

    關注

    1

    文章

    42

    瀏覽量

    13511
  • stm32cubemx
    +關注

    關注

    5

    文章

    286

    瀏覽量

    15824
  • IIC通信
    +關注

    關注

    0

    文章

    19

    瀏覽量

    3117

原文標題:TouchGFX界面開發 | 添加觸摸屏驅動

文章出處:【微信號:嵌入式攻城獅,微信公眾號:嵌入式攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    TouchGFX開發(2)----觸摸屏幕組件點亮LED

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

    C8051F020觸摸屏驅動控制

    C8051F020觸摸屏驅動控制 目前觸摸屏和液晶已成為嵌入式計算機系統常用的輸入輸出設備。觸摸屏分為電阻、電容、表面聲波、紅外線掃描和
    發表于 11-11 09:22 ?1812次閱讀
    C8051F020<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅動</b>控制

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

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

    觸摸屏的性能有哪些?

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

    什么是電容觸摸屏

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

    LPC4353 TouchGFX

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

    組態王和觸摸屏哪個好_組態王和觸摸屏區別

    現在組態軟件和觸摸屏都是市場上邊較成熟的產品,組態軟件的出現并沒有取代觸摸屏觸摸屏觸摸屏的優勢,組態軟件有組態軟件的特點。組態軟件和觸摸屏
    發表于 11-29 17:11 ?3.5w次閱讀

    Linux下的觸摸屏驅動

    對于觸摸屏驅動,我們主要需要掌握觸摸屏驅動代碼和應用層測試代碼。下面講的是基于Mini2440的觸摸屏
    發表于 04-26 14:45 ?2627次閱讀

    Android4.2觸摸屏驅動與4.0有哪些不同

    本文檔的主要內容詳細介紹的是Android4.2觸摸屏驅動與Android4.0觸摸屏驅動的差別。
    發表于 07-29 17:36 ?1次下載
    Android4.2<b class='flag-5'>觸摸屏</b><b class='flag-5'>驅動</b>與4.0有哪些不同

    觸摸屏電容原理_觸摸屏有哪些應用領域

    觸摸屏是目前最友好的計算機用戶接口界面,在消費電子產品的應用越來越廣泛,觸摸檢測好裝置和觸摸屏控制器,觸摸屏裝置過程對檢測裝置的機械結構造
    發表于 06-26 16:59 ?2742次閱讀

    如何在TouchGFX框架下實現校準電阻觸摸屏?

    電阻觸摸屏 3. 校準添加 電阻式觸摸屏在實際應用必須進行校準,而校準有多種方法,一種是使用TouchGFX自帶的
    的頭像 發表于 01-21 10:14 ?4853次閱讀
    如何在<b class='flag-5'>TouchGFX</b>框架下實現校準電阻<b class='flag-5'>觸摸屏</b>?

    觸摸屏電容的原理,觸摸屏有哪些應用領域

    瑞翔數碼觸摸屏電容原理 觸摸屏是目前最友好的計算機用戶接口界面,在消費電子產品的應用越來越廣泛,觸摸檢測好裝置和觸摸屏控制器,
    發表于 03-18 17:24 ?3266次閱讀

    觸摸屏軟件如何添加圖片

    觸摸屏軟件添加圖片方法擴展標準庫的應用方法。電腦上找到觸摸屏編程軟件 CoolMayHMI 的安裝路徑,默認安裝在 C 盤;
    發表于 05-07 14:47 ?0次下載

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

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

    電容觸摸屏原理 電容觸摸屏和電阻觸摸屏有什么區別

    電容觸摸屏和電阻觸摸屏是兩種常見的觸摸屏技術,它們在原理、結構和應用方面都有很大的區別。下面將詳細介紹電容觸摸屏的原理、結構和特點,并與電阻觸摸屏
    的頭像 發表于 01-22 16:13 ?6416次閱讀
    主站蜘蛛池模板: 一区二区三区四区免费视频 | 黄色小视频免费 | 在线播放免费视频 | 看全色黄大色大片免费久久怂 | 综合激情五月婷婷 | 亚欧成人中文字幕一区 | 国模私拍福利一区二区 | 五月激情综合丁香色婷婷 | 免费观看a黄一级视频 | 日日爱夜夜爱 | 夜夜做日日做夜夜爽 | 西西人体www303sw大胆高清 | 国产大片黄在线看免费 | 久久成人精品免费播放 | 亚洲午夜久久久 | 午夜久久免影院欧洲 | 国产精品福利午夜在线观看 | 天天干天天操天天爱 | 欧美 激情 在线 | 午夜福利国产一级毛片 | 久久夜夜肉肉热热日日 | 亚洲国产成人精品女人久久久 | 性xxxxhd高清 | 在线免费公开视频 | 最近观看免费高清视频 | 久久婷婷久久一区二区三区 | 国产精品你懂的在线播放 | 亚洲伊人久久大香线蕉影院 | 日本免费不卡在线一区二区三区 | 日本xxxxx69hd日本 | 国产小视频在线看 | 五月桃花网婷婷亚洲综合 | 久久深夜福利 | 无遮挡很爽很污很黄在线网站 | 99久热| 成人a大片高清在线观看 | 国产精品久久久久久久午夜片 | 上课被同桌强行摸下面小黄文 | 欧美天堂在线观看 | 狠狠色噜噜狠狠狠狠999米奇 | 大香伊在人线免费 |