0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

TouchGFX实现触摸功能的方法及原理

STM32单片机 来源:STM32单片机 作者:STM32单片机 2022-05-12 13:14 次阅读

1.引言

越来越多的智能设备会在 MCU 上实现图形界面,而 TouchGFX 是专门用于 ST MCU上的图形界面设计软件,使图形界面在 MCU 上能达到类似智能手机的显示效果。TouchGFX 图形引擎包括三部分:搜集、更新、渲染。其中在搜集阶段,图形引擎从外部环境收集事件,这些事件通常是触摸和按钮事件。TouchGFX 采样并将事件传递到应用程序,这样原始触摸动作就被转换为更具体的应用程序的触摸事件。例如,点击(用户在显示屏上按下或松开手指)、拖动(用户触摸显示屏并在显示屏上移动手指)、手势(用户向一个方向快速移动手指,然后松开)等功能,这些操作都会被图形引擎识别并转发给当前活动的 UI 元素。

本文主要介绍 TouchGFX 从显示器的触摸控制器读取触摸坐标,并将其传递给应用程序的方法及原理,使开发者能够很容易的在 TouchGFX 生成的代码中添加触摸功能。

2.TouchGFX 抽象层架构

TouchGFX 引擎通过 实例化了的HAL子类来访问 HAL。这些子类由 TouchGFX Generator生成,Generator 是创建抽象层的主要工具,可以生成反映 STM32CubeMX 配置的 HAL 部分,以及 CMSIS V1 或 V2 的 OSAL。通常 HAL 的架构如下图 1 所示。

TouchGFX 抽象层(Abstraction Layer,简称 AL)具有一套特殊的职责, 职责要么在AL (HAL)的硬件部分实现,要么在与 TouchGFX Engine 同步的 AL 部分实现,典型的做法是通过 RTOS (OSAL)来实现。图 2 总结了 TouchGFX AL 的主要职责,其中有一项任务就是报告触摸与物理按钮事件,TouchGFX 将原始触摸动作转换为具体的触摸事件,并转发给当前活动的 UI 元素。

3.触摸功能实现步骤

要实现触摸功能,首先需通过 STM32CubeMX 正确配置触摸控制器和 MCU,并添加相应驱动代码,保证 MCU 通过 I2C 或其他接口从触摸控制器读取信息,最后在TouchController 接口函数中添加相应的实现代码。

3.1. STM32CubeMX 配置

为了实现与触摸控制器的通讯,大多数触摸控制器都会连接至 I2C 总线,因此需要在STM32CubeMX 中对 I2C 外设进行设置。许多 STM32 MCU 具有多个 I2C 外设,因此需选择正确的 I2C 进行配置,此外还需配置相关 GPIO,图 3 是 I2C 在 STM32CubeMX 中的配置界面,开发者需要根据触摸控制器驱动芯片进行正确配置。

配置好 I2C 后,还需添加 I2C 的驱动代码,如果没有用于触摸控制器的驱动代码,则需要从头开始编写。STM32Cube 固件库中提供了一些 I2C 通讯的驱动程序,开发者可以从中参考相关代码进行修改使用。根据触摸控制器的数据手册,为确保通过读取寄存器可以获取触摸坐标,首先要检查的是触摸控制器的 I2C 地址,然后读取“设备 ID”寄存器,以进行测试,然后测试是否可以从触摸控制器接收到正确的 x 值和 y 值。

3.2. 在接口函数中添加实现代码

在渲染新的一帧之前,TouchGFX 引擎从 TouchController 和 ButtonController 接口收集外部输入。通过引擎将触摸控制器的坐标转换为点击、拖动和手势事件,并传递至应用程序。一些触摸控制器能够报告多个触摸点,TouchGFX 不支持此功能,通常,只需选择第一个触摸点。

TouchGFX 引擎在收集输入时,引擎会调用 tc 对象的 sampleTouch()函数。TouchGFX Generator 会生成一个 TouchController 类,并将接口函数定义为空。在STM32TouchController.hpp 中会声明了 init()和 sampleTouch()两个成员函数,开发者需要做的就是在 STM32TouchController.cpp 源文件中添加相应的实现代码,在 init()函数中添加触摸控制器的初始化代码,在 sampleTouch()函数中添加相应实现代码,将读取的触摸坐标值分配给 x 和 y,并返回是否检测到触摸。

其中有多种实现 sampleTouch()函数的方法:一种是在 sampleTouch()中轮询,另一种是基于中断实现。在 sampleTouch() 中轮询:通过发送请求并轮询结果,从硬件触摸控制器(通常为 I2C) 读取触摸状态和触摸坐标,默认情况下,该函数每个 tick 时间被调用一次, 如下图 5 所示。

基于中断:I2C 读取命令由定时器定期启动,或作为对触摸硬件外部中断的响应而启动。图 6 中 STM32TouchController.cpp 代码显示了 sampleTouch 如何在 RTOS 的系统中实现。当触摸事件产生时,I2C 会产生中断,并将数据通过消息队列或全局变量提供给STM32TouchController。

小结

本文介绍了 TouchGFX 从显示器的触摸控制器读取触摸坐标,并将其传递给应用程序的方法及原理。通过 STM32CubeMX 来初始化 I2C 外设,添加相应的驱动代码,然后在STM32TouchController.cpp 源文件中实现 init()和 sampleTouch()函数,开发者就能够很容易的为 TouchGFX 工程添加触摸功能。

原文标题:工程师笔记|基于 TouchGFX 生成的代码中添加触摸功能的方法

文章出处:【微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ST
    ST
    +关注

    关注

    32

    文章

    1133

    浏览量

    128931
  • 触摸
    +关注

    关注

    7

    文章

    198

    浏览量

    64227
  • TouchGFX
    +关注

    关注

    1

    文章

    42

    浏览量

    13239

原文标题:工程师笔记|基于 TouchGFX 生成的代码中添加触摸功能的方法

文章出处:【微信号:STM32_STM8_MCU,微信公众号:STM32单片机】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

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

    使用STM32CubeMX移植TouchGFX 一文中介绍了如何用TouchGFX点亮屏幕,但是此时屏幕还没有触摸功能。下面将介绍如何添加触摸
    的头像 发表于 10-09 14:41 2107次阅读

    TouchGFX开发(2)----触摸屏幕组件点亮LED

    了解如何使用 TouchGFX 配置屏幕,添加触摸按钮,并通过按钮控制板载 LED 的状态。
    的头像 发表于 11-09 15:25 1377次阅读
    <b class='flag-5'>TouchGFX</b>开发(2)----<b class='flag-5'>触摸</b>屏幕组件点亮LED

    将程序通过touchgfx designer下载到开发板,无法实现触摸功能怎么处理?

    用NUCLEO-G071RB和X-NUCLEO-GFX01M1做触摸显示实验,希望点击按钮能跳转到相关界面,在touchgfx designer模拟仿真可以实现,但是将程序通过touchgfx
    发表于 03-25 06:33

    TouchGFX中Callback模板实现原理

    interaction 中给按键添加响应;或者创建多个界面,在界面间进行切换;这些功能由 designer 帮我们自动生成代码实现了,那与之对应的功能响应代码具体是如何实现的呢?
    发表于 09-11 06:16

    LPC4353 TouchGFX

    LPC4353 TouchGFX触摸屏代码。
    发表于 03-17 08:18 15次下载

    如何在TouchGFX框架下实现校准电阻触摸屏?

    1. 摘要 本文档主要介绍,如何在TouchGFX框架下,实现电阻式触摸屏的校准。分两种方法介绍,三点校准和四点校准。以800*480电阻屏为例。 2. 准备工作 可以正常运行的
    的头像 发表于 01-21 10:14 4572次阅读
    如何在<b class='flag-5'>TouchGFX</b>框架下<b class='flag-5'>实现</b>校准电阻<b class='flag-5'>触摸</b>屏?

    TouchGFX中Callback模板实现原理

    TouchGFX是用C++编写的,借助C++的模板特性,定义了一组Callback模板,基于此模板来实现响应的功能
    发表于 08-04 18:51 15次下载
    <b class='flag-5'>TouchGFX</b>中Callback模板<b class='flag-5'>实现</b>原理

    touchGFX手环滚动菜单的实现(三)

    touchGFX手环滚动菜单的实现(三)文章目录touchGFX手环滚动菜单的实现(三)前言1.实现原理分析2.代码
    发表于 12-27 19:01 9次下载
    <b class='flag-5'>touchGFX</b>手环滚动菜单的<b class='flag-5'>实现</b>(三)

    基于 TouchGFX 生成的代码中添加触摸功能方法

    基于 TouchGFX 生成的代码中添加触摸功能方法
    的头像 发表于 10-27 09:21 859次阅读
    基于 <b class='flag-5'>TouchGFX</b> 生成的代码中添加<b class='flag-5'>触摸</b><b class='flag-5'>功能</b>的<b class='flag-5'>方法</b>

    使用TouchGFX二进制翻译(Binary Translation)功能实现动态更新翻译

    电子发烧友网站提供《使用TouchGFX二进制翻译(Binary Translation)功能实现动态更新翻译.pdf》资料免费下载
    发表于 09-19 16:48 1次下载
    使用<b class='flag-5'>TouchGFX</b>二进制翻译(Binary Translation)<b class='flag-5'>功能</b><b class='flag-5'>实现</b>动态更新翻译

    STM32GUI使用TouchGFX二进制字体(Binary Font)功能实现字体动态更新

    电子发烧友网站提供《STM32GUI使用TouchGFX二进制字体(Binary Font)功能实现字体动态更新.pdf》资料免费下载
    发表于 09-19 16:53 3次下载
    STM32GUI使用<b class='flag-5'>TouchGFX</b>二进制字体(Binary Font)<b class='flag-5'>功能</b><b class='flag-5'>实现</b>字体动态更新

    STM32GUI使用TouchGFX动态图片功能实现动态更换表盘背景功能

    电子发烧友网站提供《STM32GUI使用TouchGFX动态图片功能实现动态更换表盘背景功能.pdf》资料免费下载
    发表于 09-19 16:54 5次下载
    STM32GUI使用<b class='flag-5'>TouchGFX</b>动态图片<b class='flag-5'>功能</b><b class='flag-5'>实现</b>动态更换表盘背景<b class='flag-5'>功能</b>

    实战经验 | STM32GUI TouchGFX 屏幕切换功能简介

    关键词:GUI,TouchGFX,Transition 目录预览 1、引言 2、TouchGFX屏幕切换功能 3、小结 01 引言 TouchGFX 是专用于 STM32 的图形界面设
    的头像 发表于 11-09 10:05 5543次阅读

    实战经验 | TouchGFX 控件附加 ClickListener 功能方法介绍

    Designer 中的 Mixin 功能,从基础示例 Button Example 出发,为文本框控件添加 ClickListener (Mixin 功能中的一项),并对源代码进行简单剖析。期望能帮助客户更深入地理解 STM32 To
    的头像 发表于 11-17 17:40 1350次阅读

    单片机的GPIO如何实现触摸按键的功能呢?

    单片机的GPIO如何实现触摸按键的功能呢? 触摸按键是一种使用触摸电容威廉希尔官方网站 实现的按键,它通过利用
    的头像 发表于 12-07 11:43 4161次阅读