如何添加触摸屏驱动到TouchGFX中?

使用stm32cubemx移植touchgfx 一文中介绍了如何用touchgfx点亮屏幕,但是此时屏幕还没有触摸的功能。下面将介绍如何添加触摸屏驱动到touchgfx中
1. stm32cubemx配置
在使用stm32cubemx移植touchgfx文中的stm32cubemx配置基础上,再激活一个定时器,用来给iic通信提供微秒(us)延时。本文通过软件来模拟iic通信,因此不使用stm32cubemx来进行iic配置
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中声明
void delay_us(uint16_t us){ uint16_t differ = 0xffff - us -5; __hal_tim_set_counter(&htim6, differ); hal_tim_base_start(&htim6);  while(differ  250){    iic_stop();    return 1;   }   delay_us(2);  }  set_scl_pin_l;  return 0;} void iic_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;} void iic_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;} void iic_send_byte(uint8_t txd){  uint8_t t;     set_sda_dir_out();  set_scl_pin_l;  for(t=0;t>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#define ft_cmd_wr     0x70     #define ft_cmd_rd     0x71    #define ft_devide_mode    0x00     #define ft_reg_num_finger       0x02  #define ft_tp1_reg     0x03    #define ft_tp2_reg     0x09  #define ft_tp3_reg     0x0f  #define ft_tp4_reg     0x15  #define ft_tp5_reg     0x1b  #define ft_id_g_lib_version  0xa1  #define ft_id_g_mode    0xa4     #define ft_id_g_thgroup   0x80     #define ft_id_g_periodactive 0x88     #define touch_max_num 5typedef struct{ uint8_t touch_type; uint8_t dir;   //0表示竖屏,1表示横屏 uint16_t pix_w; uint16_t pix_h; uint8_t touch_num; uint16_t x[touch_max_num]; uint16_t y[touch_max_num]; }touchtypedef;uint8_t ft5206_wr_reg(uint16_t reg, uint8_t *buf, uint8_t len);void ft5206_rd_reg(uint16_t reg, uint8_t *buf, uint8_t len);void ft5206_init(void);uint8_t ft5206_scan(touchtypedef *touch);#endif  
在工程中添加ft5206芯片驱动文件ft5206.c
#include ft5206.h#include stdio.hstatic const uint16_t ft5206_tpx_tbl[5]={ft_tp1_reg, ft_tp2_reg, ft_tp3_reg, ft_tp4_reg, ft_tp5_reg};uint8_t ft5206_wr_reg(uint16_t reg, uint8_t *buf, uint8_t len){   uint8_t i;    uint8_t ret=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 = 0;  return 0; } return touch_num;}   
2.4 将触摸驱动添加到touchgfx中
  将触摸驱动添加到触摸控制文件stm32touchcontroller.cpp中
#include extern c{#include ft5206.h}touchtypedef mtouch;void stm32touchcontroller::init(){ ft5206_init(); mtouch.dir = 1; mtouch.pix_w = 800; mtouch.pix_h = 480;}bool stm32touchcontroller::sampletouch(int32_t& x, int32_t& y){ if(ft5206_scan(&mtouch)){  x = mtouch.x[0];  y = mtouch.y[0];  return true; }     return false;}  
3. touchgfx designer中添加点击事件
在touchgfx designer中,创建一个按钮,实现点击后背景变色的功能 添加一个图标按钮,同时添加一个box作为背景
添加交互动作:实现点击图标按钮,背景颜色由黑色变为白色
点击generate code生成touchgfx代码
4. 下载测试
回到keil工程中,编译无误后,下载到开发板中。点击屏幕上的按钮,若屏幕背景色由黑色变为白色,说明点击成功,触摸驱动添加成功


热敏电阻传感器有哪四大应用?
RS-485总线的理论与实践
工业4.0时代的战备工作即将重新定义这些关系
小米智能门铃2开启众筹,定制PIR人体感应传感器支持红外夜视
美国一非营利性机构表示将利用焚烧厂产生的能量为其电动垃圾车提供动力
如何添加触摸屏驱动到TouchGFX中?
主动降噪耳机性价比排行_2020分体式无线蓝牙耳机
华为杨友桂:融合数字技术和电力电子技术,迈向数字能源新时代
从WiFi/蓝牙解决方案看智能家居离我们的生活还有多远?
国芯思辰|拍字节VFRAM新型3D铁电存储器P95S128SWSP6TF适用于便携式医疗刺激系统
9.2.4 器件参数的温度特性∈《碳化硅技术基本原理——生长、表征、器件和应用》
提高光刻机性能的关键技术及光刻机的发展情况
OpenAl提出了一种适用于文本、图像和语音的稀疏Transformer
立磨摇臂销孔磨损的修复方法
垃圾焚烧发电厂如何运转
如何根据电流来选择电缆
为什么传统的FPGA无法将智能传送到边缘
联发科携手亚马逊推出智能音箱双麦克风解决方案
一种从SDTV到HDTV的解决方案设计
三星S8跑分曝光, 骁龙835加持, 但内存遗憾