1. 图形应用和低功耗" p9 R8 W0 W$ k! d1 @0 t 随着智能设备的普及,越来越多的设备会用到图形界面,而在 STM32 MCU 上使用TouchGFX,使得图形设计变得非常简单。其中智能手表、智能手环等产品对功耗要求比较高,这就需要在图形应用同时,结合芯片的低功耗模式来优化能耗。; F$ t( S/ w( }4 p4 @/ | 在图形应用中使用低功耗,一般分为两种场景,一种是在关闭屏幕时,MCU 进入 STOP 模式,能极大的降低 MCU 功耗;另一种是在屏幕亮着的状态,MCU 进入 SLEEP 模式,也能降低MCU 功耗。而在 STM32L4+芯片上,LPSLEEP 模式相比 SLEEP 模式功耗更低,本文将在STM32L4R9 芯片上,结合 TouchGFX 和 LPSLEEP 来介绍如何在亮屏状态下实现 MCU 低功耗。 , O% [" z" h2 ?4 x. Q7 ^- r , r2 h7 k+ W1 a3 q `' G, d 2. 低功耗实现原理介绍 在使用 TouchGFX 做图形应用时,会使用到 FreeRTOS 操作系统,使用 SysTick 定时产生 1ms的中断来作为系统 tick。在所有应用任务空闲时,系统会调度 Idle 任务。此时我们能让 MCU 进入低功耗,从而达到降低 MCU 功耗的目的。% L. Q. X4 d" z' R. b! i7 y7 x' \ 2.1. Tickless Idle FreeRTOS 提供了 Tickless Idle 配置,在 FreeRTOSConfig.h 文件中,通过配置configUSE_TICKLESS_IDLE 为不同的值来配置 FreeRTOS 是否在 Idle 任务里进入低功耗,默认为 0 表示不进入低功耗。本文中将配置为 2,自定义 Idle 任务中低功耗实现。 1 h. L; T' i& f9 R1 ~% [7 I " g1 W3 a5 P" w, o1 m FreeRTOS 中进入低功耗具体是由 vPortSuppressTicksAndSleep 函数实现。配置configUSE_TICKLESS_IDLE 为 2 时,还需要重写 vPortSetupTimerInterrupt 函数。 0 T1 |: j' K g" u# q5 P5 T 2.2. TouchGFX 渲染与进 LPSLEEP 限制2 E* \4 N8 O; [/ c 根据参考手册描述,在进入 LPSLEEP 时要先切换到 LPRUN 模式,系统时钟要降低到2MHz,因此在进入、退出 LPSLEEP 时会有时钟的切换过程。% P1 J9 W: e* ? 在屏幕亮着的状态时,用户可能随时触摸屏幕,或者系统信息可能更新,因此屏幕显示的内容可能随时变化,如果此时 MCU 进入 LPSLEEP 状态,会导致系统响应不及时。另外,在屏幕内容更新时,L4R9 通过 DSI 向屏幕更新显示数据,此过程由硬件完成,在此过程中,软件也有可能会进入 LPSLEEP,这样系统时钟发生变化,会导致 DSI 更新显示数据异常,产生屏幕显示花屏的问题。& ]5 f# w4 G) ]1 g' W/ c 为了避免以上问题,在进入 LPSLEEP 前会检查当前状态,如果用户未操作屏幕,TouchGFX 已经完成渲染,DSI 刷新过程也完成,则允许系统进入 LPSLEEP 状态。这样既保证了系统正常工作,又达到了降低功耗的目的。 # [! a( w+ r# t& z8 h 完整版请查看:附件 " w- X" {6 [- q3 s r' w. y" q7 Y n) V |
LAT1066_TouchGFX图形应用在亮屏时的低功耗实现.pdf
下载255.25 KB, 下载次数: 1
基于STM32的BootLoader经验分享
基于STM32如何选择 S2-LP 的外部晶体经验分享
基于是STM32的BLE 设备地址经验分享
基于ToF传感器的3D手势识别
NUCLEO-U545RE-Q评测(2)运行环境建立
基于使用 STM32 TT 类型 IO 的注意事项经验分享
基于STM32使用Framebuffer_Analyzer工具调试图像显示
ST安全连接,护航工业物联网一路前行
基于STM32的TouchGFX 4.22解锁新功能经验分享
基于STM32的MPU子区经验分享