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

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

3天内不再提示

STM32 TouchGFX部分控件功能测试

茶话MCU 来源:茶话MCU 作者:茶话MCU 2022-08-22 11:12 次阅读

ST公司推出的用于图形界面开发的 TouchGFX Designer已经升级到4.20了。这两天我利用手头的STM32F429Discovery板对Touchgfx提供的部分控件功能做了些测试,把这个过程中遇到的一些问题做些整理,以备忘并顺便分享。

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

ab1931b0-21c6-11ed-ba43-dac502259ad0.png

ab44a8ea-21c6-11ed-ba43-dac502259ad0.png

ab67a76e-21c6-11ed-ba43-dac502259ad0.png

ab8642c8-21c6-11ed-ba43-dac502259ad0.png

第一个要注意的地方。

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

abad5de0-21c6-11ed-ba43-dac502259ad0.png

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

abd27080-21c6-11ed-ba43-dac502259ad0.png

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

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

abf32d84-21c6-11ed-ba43-dac502259ad0.png

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

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

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

ac121ca8-21c6-11ed-ba43-dac502259ad0.png

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

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

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

ac2d8218-21c6-11ed-ba43-dac502259ad0.png

在它的属性那里有个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
    +关注

    关注

    2252

    文章

    10735

    浏览量

    350910
  • TouchGFX
    +关注

    关注

    1

    文章

    42

    浏览量

    13111
  • STM32F429
    +关注

    关注

    0

    文章

    40

    浏览量

    10437

原文标题:STM32 TouchGFX 部分控件测试备忘

文章出处:【微信号:stmcu832,微信公众号:茶话MCU】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    TouchGFX 中 MCU 负载的计算过程介绍

    TouchGFX Desinger 下载的 TBS(TouchGFX Board Setup)大都带有 MCU 的 负载计算功能,那么如何在自己的板子上增加 MCU 负载计算功能
    的头像 发表于 05-24 13:24 197次阅读
    <b class='flag-5'>TouchGFX</b> 中 MCU 负载的计算过程介绍

    touchgfx swipeContainer控件加入ScrollableContainer控件;SwipeContainer空间就用不了是哪里的问题?

    touchgfx 问题 :swipeContainer控件加入ScrollableContainer控件;SwipeContainer空间就用不了了,只能执行S
    发表于 03-22 11:48

    TouchGFX怎样任意修改控件大小?

    TouchGFX怎样任意修改控件大小,而不是只能选择固定的大小?
    发表于 03-18 07:17

    touchgfx如何改变图片颜色?

    touchgfx是否有提供函数可以直接改变image控件中图片的颜色,类似LVGL中图片控件的recolor函数,对图片重新着色成某种纯色图片,如果touchgfx没有这种函数,是否有
    发表于 03-15 06:24

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

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

    TouchGFX开发(3)----使用TouchGFX配置IIC接口OLED

    TouchGFX开发(3)----使用TouchGFX配置IIC接口OLED
    的头像 发表于 11-09 15:31 1139次阅读
    <b class='flag-5'>TouchGFX</b>开发(3)----使用<b class='flag-5'>TouchGFX</b>配置IIC接口OLED

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

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

    TouchGFX从旧版本更新到新版本的方法

    X-CUBE-TOUCHGFXSTM32Cube 生态系统的一个软件包,它包含以下组件:TouchGFX Designer,TouchGFX Generator 和
    的头像 发表于 11-01 17:15 781次阅读
    <b class='flag-5'>TouchGFX</b>从旧版本更新到新版本的方法

    实战经验 | TouchGFX从旧版本更新到新版本的方法

    TouchGFX 不断进行软件版本更新,其提供的功能也越来越丰富,有些新的功能只有更新的版本才有,所以很多时候会面临将旧版本的 TouchGFX 迁移到更新版本的问题。在创建
    的头像 发表于 11-01 17:15 602次阅读

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

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

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

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

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

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

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

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

    TouchGFX如何才能任意修改控件大小?

    TouchGFX怎样任意修改控件大小,而不是只能选择固定的大小?
    发表于 08-07 11:27

    TouchGFX4.2x新功能 助力STM32用户快速设计美观统一友好的人机交互产品

    电子发烧友网站提供《TouchGFX4.2x新功能 助力STM32用户快速设计美观统一友好的人机交互产品.pdf》资料免费下载
    发表于 07-29 11:01 0次下载
    <b class='flag-5'>TouchGFX</b>4.2x新<b class='flag-5'>功能</b> 助力<b class='flag-5'>STM32</b>用户快速设计美观统一友好的人机交互产品