[其他ST产品] TouchGFX FPS 的计算方法 LAT1478

[复制链接]
580|11
STM新闻官 发表于 2025-9-12 09:10 | 显示全部楼层 |阅读模式
1. FPS
帧率(Frames Per Second,简称 FPS)是指视频或动画中每秒钟显示的帧数,是画面显示流畅性的关键指标。TouchGFX Desinger 中提供了 FPS 计算公式,在 Demos 类别下,几个显示界面带有 FPS 的 Demo 其代码中都带有 FPS 计算公式。 大致是在每个界面的handleTickEvent 函数中通过如下公式来计算 FPS 值的。
8883568c14d0ac1203.png
6469468c14d138431e.png
图1. TouchGFX Designer 中的 FPS 计算公式(帧补偿打开)



2. FPS 计算公式的局限性

如果使用上述公式来计算 FPS,其实是需要满足一定前提条件的。一个是图像的刷新率是60Hz,另一个是是否开启帧补偿。


2.1. 刷新率是不是 60Hz

上述公式是在刷新率是 60Hz 的情况下计算的,如果 TouchGFX 界面的刷新率不是60Hz,那么上述公式计算出来的结果就不准确。

因为 FPS 是指在 1 秒钟时间里传输的图像的帧数量,那么每个 Tick 的周期要保证是16.667ms,这样才能使用 if (frames + frameSkippedCounter >= 60)的判断条件。TouchGFX 提供的 LTDC 接口的 TBS(TouchGFX Board Setup)每个 Tick 是 16.667ms,所以都使用这个公式,如果是自己重新创建的工程,那么就需要注意这点。如果一个 Tick周期是 33.3ms,1s 是 30 个 tick 周期,那么就需要修改判断条件为 if (frames + frameSkippedCounter >= 30)。

2.2. 帧补偿关闭的情况
其次,上述公式只有在 TouchGFX 丢帧补偿使能的情况下才有效。如果 TouchGFX 丢帧补偿处于关闭状态,那么可以用以下公式来计算 FPS。
118168c14d54b2cb9.png

3026268c14d5b05750.png
图2. TouchGFX Designer 中的 FPS 计算公式(帧补偿关闭)



3. 推荐的 FPS 计算公式

考虑到有时无法准确获得刷新率,以及不知道帧补偿是开启还是关闭,那么推荐的方式是通过逻辑分析仪来测量 1s 之内的渲染次数。例如测量 1s 内的 RENDER_TIME_GPIO 翻转的次数,这样是最准确的。

通过在 STM32CubeMX 中定义一个 RENDER_TIME_GPIO,然后 TouchGFX 引擎会自动调用 TouchGFXGPIO.cpp 中的以下代码来进行翻转。

5704868c14d8327a8a.png

7724568c14d8c179a3.png

图3. TouchGFXGPIO.cpp 中 GPIO 翻转相关代码

4. 小结

本文档介绍了不同情况下如何准确测量 TouchGFX 应用的帧率 FPS 的方法,供参考使用。

328868c14da4d41c6.png




评论

TouchGFX的FPS计算需结合硬件刷新率、帧补偿设置及软件实现方式综合考量  发表于 2025-10-10 14:17
磨砂 发表于 2025-10-12 17:26 | 显示全部楼层
通常在每个界面的[size=0.875]handleTickEvent函数中进行计算
晓伍 发表于 2025-10-12 19:42 | 显示全部楼层
过累加已渲染的帧数和跳过的帧计数器,当总和达到60时触发判断条件,从而得出FPS值
八层楼 发表于 2025-10-12 21:55 | 显示全部楼层
此公式默认假设图像刷新率为60Hz,即每个Tick周期为16.667ms
观海 发表于 2025-10-13 08:42 | 显示全部楼层
公式仅在系统实际刷新率为60Hz时准确。若使用其他刷新率,需调整判断条件中的阈值
guanjiaer 发表于 2025-10-13 11:06 | 显示全部楼层
该公式要求TouchGFX的丢帧补偿功能处于开启状态。如果关闭了帧补偿,则需要采用不同的计算方式
heimaojingzhang 发表于 2025-10-13 13:30 | 显示全部楼层
官方提供的LTDC接口板级支持包默认配置为60Hz刷新率,但自定义工程可能因硬件改动导致实际刷新率变化,此时直接套用原公式会导致误差
keaibukelian 发表于 2025-10-13 16:14 | 显示全部楼层
对于无法确定刷新率或帧补偿状态的场景,建议使用逻辑分析仪监测[size=0.875]RENDER_TIME_GPIO信号的翻转次数
paotangsan 发表于 2025-10-13 18:57 | 显示全部楼层
由于FPS计算涉及全局变量更新,需确保多线程环境下的数据同步
renzheshengui 发表于 2025-10-13 21:32 | 显示全部楼层
初次部署时应对比不同方法的结果,确认与预期相符后再固化代码
wowu 发表于 2025-10-14 09:26 | 显示全部楼层
在STM32CubeMX中定义一个GPIO引脚作为渲染时间标记,由TouchGFX引擎自动翻转;通过统计单位时间内该信号的变化次数来精确计算FPS
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:意法半导体(中国)投资有限公司
简介:您的嵌入式应用将得益于意法半导体领先的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器。

1398

主题

1716

帖子

25

粉丝
快速回复 在线客服 返回列表 返回顶部