STM32 TouchGFX部分控件功能测试

发布者:心满意足最新更新时间:2024-08-22 来源: elecfans关键字:STM32  TouchGFX 手机看文章 扫描二维码
随时随地手机看文章

我这次主要测试了TextArea,界面按键响应、动态图形【dynamicgraph】、模拟时钟【Analog Clock】、进度条显示以及软件上添加虚拟函数的实现。涉及的界面有下面几个:【仅为测试,界面美丑略过】

ab1931b0-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

ab44a8ea-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

ab67a76e-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

ab8642c8-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

第一个要注意的地方。

我使用的IDE是STM32CubeIDE。当我在相应hpp头文件里添加虚拟函数声明时,需要在IDE环境里专门对该头文件做个save操作,不然在cpp函数里写好相应函数后编译时总提示没有做函数声明。 举个例子说下,比方我要在Screen1View.cpp写一个IncDuty()函数。

abad5de0-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

我们需在其对应的头文件里加上虚拟函数的声明。在头文件里添加了该虚拟函数声明后,需要手动对该文件做个SAVE操作【File菜单下选择Save】,否则老是编译出错,提示函数无声明,即像下面提示:

abd27080-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

但别的cpp文件修改后倒不用单独做save操作,直接编译即可。这个地方因为要操作的文件较多,我多次忘记,直到编译提醒才知道。【不知该问题是否跟IDE有关?我没测试别的IDE。反正提醒下吧。】

第2个要注意的地方,我这里通过TouchGFXdesigner的文本区域控件【textarea】显示STM32的某通道ADC转换值,用到了浮点。

abf32d84-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

刚开始我用的是这个函数:

Unicode::snprintf(textArea1Buffer,TEXTAREA1_SIZE, '%f',AdcResult);

结果总是出不来,但当我将AdcResult改为整型变量,通过%d可以显示正确结果。先怀疑过IDE方面浮点功能相关配置,经检查没问题。后来到TouchGFX在线服务站点搜索snprintf才有新的发现,如下图所示:

ac121ca8-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

看来我的函数用错了,使用浮点有另外一个输出函数,即:

Unicode::snprintfFloat(textArea1Buffer, TEXTAREA1_SIZE,'%2.4f', AdcResult);

第3个要注意的地方,也是跟上面textarea输出显示有关的问题。

ac2d8218-21c6-11ed-ba43-dac502259ad0.png?imageView2/2/w/1000

在它的属性那里有个Auto-size的选项,勾选与不勾选的实现代码是不一样的。一般为了简单点,可以不做勾选,自己手动拉个合适大小的框来显示字符及数据。比方还是以上面显示ADC输出电压值为例,其实现代码如下:

void Screen2View:: DispAdcValue()

{

Unicode::snprintfFloat(textArea1Buffer,TEXTAREA1_SIZE,'%2.4f', AdcResult);

//textArea1.resizeToCurrentText();

//memset(textArea1Buffer,'�',strlen(....));

textArea1.invalidate();

}

如果说你希望勾选,你的代码就将上面的屏蔽语句加上即可,有兴趣可以自行试试。

再就是那个动态图形显示那个地方,显示的点数及修改样点值的频率都是可以调整的。我这里是让它动态显示一路PWM输出的方波,为了实现它,我在这个地方做了些来回调试才实现比较好的效果。

另外,我在组织模拟时钟代码时遇到的一个小问题。我用到Model::Tick里的modelListener功能。

有个地方本来应该是view.UpdateClock(hours,minutes,seconds);我看库里面绝大部分单词的首字母都是大写的,我就惯性地将view的首字母写成大写V了,编译没有直接提示出错,但就是结果出不来。这里各种API函数很多,初次使用者对他们都较陌生,这种比较隐蔽的问题难免会碰上。

我顺便把测试中用到的几个跟GUI这边有关的函数实现代码也贴过来,供有需要的人参考。

modelListener->UpdateClock(sTime.Hours,sTime.Minutes,sTime.Seconds);

analogClock1.setTime24Hour(sTime1.Hours,sTime1.Minutes,sTime1.Seconds);

void Screen2View:: DispAdcValue()//基于textarea控件固定宽度显示数据

{

//Unicode::snprintf(textArea1Buffer, TEXTAREA1_SIZE,'%d?u?s?', AdcResult);

Unicode::snprintfFloat(textArea1Buffer,TEXTAREA1_SIZE, '%2.4f', AdcResult);

//textArea1.resizeToCurrentText();

//memset(textArea1Buffer,'�',…..);

textArea1.invalidate();

}

void Screen3View::UpdateCnt() //For progress Bar

{

if (UpdateCNT> 2000) {UpdateCNT = 0;}

//UpdateCNT comesfrom Timer Interrupt

textProgress1.setValue(UpdateCNT);

circleProgress1.setValue(UpdateCNT);

imageProgress1.setValue(UpdateCNT);

}

voidScreen1View::IncDuty() //For TIM3-CH1

{

CCRValue+=100;

if (CCRValue > 50000)

{

TIM3->CCR1 = 50000;

}

else

{

TIM3->CCR1 = CCRValue;

}

}

voidScreen1View::DecDuty()//For TIM3-CH1

{

CCRValue-=100;

if (CCRValue <0000)

{

CCRValue = 0 ;

TIM3->CCR1 = 000;

}

else

{

TIM3->CCR1 = CCRValue;

}

}

voidScreen1View:: ModifyGraph() //forDynamic grahph

{

uint16_t temp;

temp = GPIOB->IDR & 0x0010;

if (temp==0)

{

dynamicGraph1.addDataPoint(0);

// dynamicGraph1.invalidate();

}

else

{

dynamicGraph1.addDataPoint(99);

// dynamicGraph1.invalidate();

}

}

最后补充下,当我加入第4个页面屏的内容时,电脑上模拟下还行,基于STM32F429开发板已经没法正常稳定运行了,毕竟资源有限。当然,不同的人设计4个页面所涉及的内容及任务数可能大相径庭,可能的结果这里不好说绝对。不过,我的测试过程中运行上文中提到的前3个页面内容及功能是没有问题的。


关键字:STM32  TouchGFX 引用地址:STM32 TouchGFX部分控件功能测试

上一篇:基于STM32单片机的摇头风扇设计
下一篇:STM32 Step-by-Step如何加快开发速度

推荐阅读最新更新时间:2026-03-20 16:45

意法半导体更新TouchGFX软件,增加视频功能丰富STM32用户体验
意法半导体更新TouchGFX软件,增加视频功能,丰富STM32用户体验 2021 年 11月5日,中国——意法半导体发布了最新版的STM32* 微控制器 (MCU)图形界面开发软件TouchGFX Version 4.18,新增了视频播放功能,改进了多名开发者协同开发工具,支持新的 X-NUCLEO 显示板。 通过可以播放 Motion-JPEG (MJPEG) 视频文件,TouchGFX为家庭自动化产品、穿戴设备、医疗设备和工业传感器等小型设备带来了更多产品力,实现丰富的功能,例如,用户操作指南或有趣的启动和暂停屏幕,提升图形用户界面的视觉效果。开发人员可以使用自己的 MJPEG 文件或从软件提供的电影示例中选择
[嵌入式]
意法半导体更新<font color='red'>TouchGFX</font>软件,增加视频<font color='red'>功能</font>丰富<font color='red'>STM32</font>用户体验
ST更新TouchGFX软件包,功能丰富并减少对STM32内存和CPU需求
意法半导体更新了STM32 *微控制器TouchGFX用户界面软件框架,新增功能能够让图形用户界面变得更流畅,动态效果更好,并降低对存储器和CPU的需求。 TouchGFX是STM32生态系统中的一套免费软件工具,包括TouchGFX Designer PC(PC端工具)和TouchGFX Engine(设备端软件)。TouchGFX Designer PC用于设计和配置丰富多彩的用户界面,而TouchGFX Engine则运行在终端设备上,使用户界面实现高性能。最新的4.12版TouchGFX对这两个软件都进行了更新。用户现在可以在单片显示解决方案上构建先进的用户界面,无需外部RAM存储器或闪存,节能特性可以延长电池续航时间
[嵌入式]
基于机智云与STM32的智能拐杖安全监测系统在养老物联网中的应用
随着老龄化加剧与科技进步,“ + 养老” 成为智慧养老核心方向,老年人出行安全与健康监测需求日益迫切。针对传统拐杖智能化不足、功能单一的痛点,本文提出一种融合多与物联网平台的智能拐杖系统,以 为核心主控,集成 GPS、姿态检测、超声波等传感模块,搭配 本地显示与机智云 App,实现定位、防摔、报警及云端监测一体化功能,为老年人安全出行与家庭照护提供技术支撑。 01系统总体设计 拐杖系统主要能实现GPS定位、防摔倒、障碍物检测、液晶显示、短信报警、语音提示、联网App等功能。系统总体设计结构如图1所示。 图1智能拐杖系统总体设计结构 02硬件设计 智能拐杖系统通过STM32主控芯片来传输和处理各传感设
[单片机]
基于机智云与<font color='red'>STM32</font>的智能拐杖安全监测系统在养老物联网中的应用
实战解析:通过一个小项目掌握STM32所有外设
一、项目目标:实现外设间的无缝协同 本项目旨在实现一个清晰的核心功能: 读取数据() 显示温度在 上() 温度超限时蜂鸣器报警(PWM/) 通过按键调整报警阈值(GPIO 输入) 通过串口输出调试信息() 后台定时刷新显示(定时中断 + ) 这一个项目,几乎覆盖了 的全部核心外设模块,是最适合系统学习的实践框架。 二、外设初始化思路 1. RCC 系统 所有外设都依赖时钟。先开启 GPIO、USART、C、M、I2C 等模块的时钟。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_USART1,ENABLE); RC
[嵌入式]
STM32外设开发的五个常见陷阱与实战技巧
STM32作为嵌入式开发领域的热门微控制器,功能丰富,几乎能够胜任所有常见控制任务:GPIO、ADC、PWM等外设一应俱全。然而,正因其功能强大,开发中遇到陷阱的机会也随之增多。许多初学者甚至经验丰富的开发者,常在外设配置上浪费大量时间,调试许久仍无法定位问题。本文总结了5个STM32外设使用中最易踩坑的技巧,助你少走弯路,提升开发效率。 1. GPIO 配置别忘了上拉/下拉 很多初学者在读取按键、外部或中断输入时,会发现输入状态总是不稳定,甚至出现抖动或误触发。这通常是因为 GPIO 输入口浮空造成的。 常见坑: 输入引脚未配置上拉/下拉,导致状态随机波动。 上拉/下拉和外部电路冲突,影响可靠性。 输入
[嵌入式]
一起用MATLAB玩STM32(测试模型搭建)
之前已经发布两篇文章,分别是软件安装、软件设置。这一篇将详述测试模型搭建过程。 创建Similink空白页之后,先在模型库中找到与STM32的接口模块,如下图: Matlab2021b模型库 将输入输出模块拖入到新建的Simulink模块中: 模块搭建 对它们的配置如下: 模块配置 注意:这里的配置端口与开发板原理图一一对应。 之后仿真在Hardware页面进行。配置stop Time为inf。然后点击Monitor Tune。 StopTime时间配置 待nucleo板的通信灯开始闪烁,表明程序在正常下载。同时matlab也不报错,表明一切正常,之后,就可以通过修改matlab的程序,控制led灯。查看输入的按键
[单片机]
STM32单片机学习】第12章 GPIO—按键轮询
12.1 关于按键 前面控制LED灯是让GPIO输出高低电平,而获取按键则是读取GPIO电平,从而获知用户是否按下按键。 按键监测一般有两种:按键扫描和按键中断。按键扫描是间隔很短时间反复查询GPIO状态,从而得知是否有按键动作,这种方式代码简单,但比较耗资源。按键中断而是通过按键产生中断信号,从而实现按键的检测,这种方式需要使用到中断机制,需要对MCU了解深入一点,效果是最好的。 本节先介绍按键扫描,理解按键的基本原理,下一章再介绍按键中断,同时了解STM32F103的中断使用方法。 按键一般占用一个GPIO口,通过监测该GPIO的电平变化得知按键操作,典型的电路如图 12.1.1 所示。当所需按键比较多时,则可以采用矩阵按键减
[单片机]
I2C、IIC通讯(填坑作,MPU6050数据读取,STM32主控,附源码)
上图的VCC 接 3.3V,GND接地,SCL和SDA分别接上单片机引脚,并加上上拉电阻,AD0接地。 代码链接:https://pan.baidu.com/s/1AvuMYvgX8Xy8g81S0Ay5Yg 提取码:sce0 初始化单片机引脚,并置1 程序里引脚的变化顺序还有延时的位置一定不要错。 IIC起始信号;SDA置零,等待,SCL置零 写入一次数据,IIC每次写入的数据长度都是8Bit,写入顺序是从最高位写到最低位。 SCL置0,SDA存放数据的最高位,数据左移1位,等待,SCL置1,数据起效,等待。 右移7位:1000 0000会变成0000 0001。(0X80 0X01) 左移1位:1101 000
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved