你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32 TouchGFX 部分控件测试备忘

[复制链接]
STMCU小助手 发布时间:2022-8-21 21:46
微信图片_20220821214635.png

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

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

微信图片_20220821214629.png
微信图片_20220821214625.png
微信图片_20220821214622.png
微信图片_20220821214617.png

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

微信图片_20220821214614.png

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

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

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

微信图片_20220821214600.png

刚开始我用的是这个函数:
Unicode::snprintf(textArea1Buffer, TEXTAREA1_SIZE, "%f",AdcResult);

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

微信图片_20220821214557.png

看来我的函数用错了,使用浮点有另外一个输出函数,即:
Unicode::snprintfFloat(textArea1Buffer, TEXTAREA1_SIZE, "%2.4f", AdcResult);

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

微信图片_20220821214552.png

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

  2. {

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

  4. //textArea1.resizeToCurrentText();

  5. //memset(textArea1Buffer,'\0',strlen(....) );

  6. textArea1.invalidate();

  7. }
复制代码

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

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

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

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

我顺便把测试中用到的几个跟GUI这边有关的函数实现代码也贴过来,供有需要的人参考。
  1. modelListener->UpdateClock(sTime.Hours,sTime.Minutes,sTime.Seconds);



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



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

  4. {

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



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

  7. //textArea1.resizeToCurrentText();

  8. //memset(textArea1Buffer,'\0',….. );



  9. textArea1.invalidate();

  10. }



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

  12. {

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

  14. //UpdateCNT comes from Timer Interrupt

  15. textProgress1.setValue(UpdateCNT);

  16. circleProgress1.setValue(UpdateCNT);

  17. imageProgress1.setValue(UpdateCNT);

  18. }



  19. void Screen1View::IncDuty() //For TIM3-CH1

  20. {

  21. CCRValue+=100;

  22. if (CCRValue > 50000)

  23. {

  24. TIM3->CCR1 = 50000;

  25. }

  26. else

  27. {

  28. TIM3->CCR1 = CCRValue;

  29. }

  30. }



  31. void Screen1View::DecDuty()//For TIM3-CH1

  32. {

  33. CCRValue-=100;

  34. if (CCRValue <0000)

  35.   {

  36. CCRValue = 0 ;

  37. TIM3->CCR1 = 000;

  38.   }

  39. else

  40.   {

  41. TIM3->CCR1 = CCRValue;

  42.   }

  43. }



  44. void Screen1View:: ModifyGraph() //for Dynamic grahph

  45. {

  46. uint16_t temp;

  47. temp = GPIOB->IDR & 0x0010;

  48. if (temp==0)

  49. {

  50. dynamicGraph1.addDataPoint(0);

  51. // dynamicGraph1.invalidate();

  52. }

  53. else

  54. {

  55. dynamicGraph1.addDataPoint(99);

  56. // dynamicGraph1.invalidate();

  57. }

  58. }

复制代码


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



收藏 评论0 发布时间:2022-8-21 21:46

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版