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

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

3天内不再提示

STM32 TouchGFX部分控件功能测试

茶话MCU 来源:茶话MCU 作者:茶话MCU 2022-08-22 11:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

我这次主要测试了TextArea,界面按键响应、动态图形【dynamicgraph】、模拟时钟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
    +关注

    关注

    2305

    文章

    11120

    浏览量

    371050
  • TouchGFX
    +关注

    关注

    1

    文章

    42

    浏览量

    14121
  • STM32F429
    +关注

    关注

    0

    文章

    40

    浏览量

    11794

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【课程升级】STM32U5开发板《TouchGFX 图形界面开发》,从快速入门到深度UI实战教程

    好消息,华清远见STM32U5开发板配套课程升级通知!本次升级计划,主要致力于为初学者提供更深入、更实用的TouchGFX图形界面开发学习体验。01课程升级核心内容快速入门,构建完整学习路径
    的头像 发表于 11-04 11:05 193次阅读
    【课程升级】<b class='flag-5'>STM32</b>U5开发板《<b class='flag-5'>TouchGFX</b> 图形界面开发》,从快速入门到深度UI实战教程

    touchgfx4.25颜色错误是什么原因导致的?

    touchgfx4.25颜色错误 .紫色显示成了蓝色. 使用rgb888或者rgb565模式都试过结果一样.后方的红绿蓝紫是svg图片.非box控件的颜色.
    发表于 08-14 06:21

    TouchGFX Designer下载工程到STM32H7S7-DK报错的原因?

    我在使用TouchGFX Designer下载工程,编译无错误,下载提示错误,日志如下: Flashmake -f ../../gcc/Makefile flashmake -C D:/stm32
    发表于 06-17 07:26

    TouchGFX Designer下载工程到STM32H7S7-DK报错的原因?

    我在使用TouchGFX Designer下载工程,编译无错误,下载提示错误,日志如下: Flashmake -f ../../gcc/Makefile flashmake -C D:/stm32
    发表于 06-12 07:55

    STM32U585CIU6移植touchgfx之后stm32不运行程序怎么解决?

    MCU:STM32U585CIU6 cubemx:6.14 touchgfx:25 我在cubemx配置生成touchgfx的初始化,时基是TIM7,没有用RTOS,生成之后再用designer随便
    发表于 06-10 07:05

    STM32U5+8bit_8080 LCD 怎么配置touchgfx

    我参与的项目使用STM32U575做为主空,使用fmc来驱动8080接口的8bitLCD,配置touchgfx时不能配置为8bit,其他选型例如DMA2D也使用不了,我该怎么做?
    发表于 06-09 06:23

    移植touchgfx之后stm32不运行程序怎么解决?

    MCU:STM32U585CIU6 cubemx:6.14 touchgfx:25 我在cubemx配置生成touchgfx的初始化,时基是TIM7,没有用RTOS,生成之后再用designer随便
    发表于 06-06 07:43

    求助,移植touchgfx之后stm32不运行程序怎么解决?

    这个是我中断优先级,还有touchgfx的中断。进入debug运行都是在Reset_Handler 然后进入debug点很多次运行才执行发送串口而且还是乱码,不加入之前还是正常的
    发表于 05-21 08:23

    STM32U5+8bit_8080 LCD怎么配置touchgfx?

    我参与的项目使用STM32U575做为主空,使用fmc来驱动8080接口的8bitLCD,配置touchgfx时不能配置为8bit,其他选型例如DMA2D也使用不了,我该怎么做?
    发表于 04-28 08:12

    STM32U5+8bit_8080 LCD怎么配置touchgfx

    我参与的项目使用STM32U575做为主空,使用fmc来驱动8080接口的8bitLCD,配置touchgfx时不能配置为8bit,其他选型例如DMA2D也使用不了,我该怎么做?
    发表于 04-27 07:11

    请问TOUCHGFX中别人封装好的控件容器可以直接使用吗?

    TOUCHGFX中别人封装好的控件容器可以直接使用吗?
    发表于 03-13 08:15

    STM32f407+TOUCHGFX用CubeMX生成后编译不通过是哪里出了问题?

    用CubeMX生成的STM32f407+TOUCHGFX,一路默认,生成文件后,一堆函数显示找不到,还有就是RAM不够用,是哪个没配置好吗?
    发表于 03-12 07:55

    TouchGFX生成的工程,再使用STM32CubeMX生成MDK工程,下载时报错是怎么回事?

    我在用TouchGFX生成的工程,再使用STM32CubeMX生成MDK工程,编译后没有出错,再是在下载时报错: 如果不加载这个算法文件,那么按键图标就是乱码。
    发表于 03-11 06:50

    请问stm32L562中如何开发TouchGFX

    TouchGFX生成相关程序及文件 在cubeMX中找到开发板stm32L562eDK,在其中是能fmc,crc,freertos,x-cube-touchgfx生成相关代码输入程序后,黑屏。请教高手,还缺什么步骤?
    发表于 03-07 06:11

    TouchGFX助力STM32打造高效GUI显示方案

    TouchGFX 是一款针对 STM32 微控制器优化的先进免费图形软件框架。 TouchGFX 利用 STM32 图形功能和架构,通过创建
    的头像 发表于 01-13 15:16 1029次阅读
    <b class='flag-5'>TouchGFX</b>助力<b class='flag-5'>STM32</b>打造高效GUI显示方案