[STM32L5] 【STM32L562 DK试用】全网首例STM32L562移植touchgfx

[复制链接]
 楼主| lulugl 发表于 2025-5-16 21:05 | 显示全部楼层 |阅读模式
【前言】
由于stm32l562在touchgfx中没有touchgfx的示例,因此需要自己移植touchgfx工程。我查找了全网,好象都没有移植成功的分享。
【移植步聚】
1、驱动好lcd屏,我在上篇的文章已经驱动好了:https://bbs.21ic.com/icview-3454182-1-1.html
2、打开stm32cubemx【注】需要先安装后cube-touchgfx包。使能touhcgfx。
3、配置touhcgfx参数如下:
80873682734f1c783e.png
4、开启一个定时器TIM7,使用他的中断事件给touchgfx提供心跳包。
5120368273547782e2.png
同时开启中断。
5、使用stm32cubemx重新生成工程后,在目录:\pro\uart\TouchGFX下面打开touchgfx工程:
56384682735964523c.png
6、为了测试,创建静态屏如下:
62938682735d06b24f.png
7、生成代码后进入keil进行用户代码添加。
8、打开TouchGFXHAL.cpp文件,在前面添加lcd的驱动头文件:
988626827364071752.png
  1. #ifdef __cplusplus  
  2. extern "C"{  
  3. #include "stm32l562e_discovery_lcd.h"
  4. }  
  5. #endif  
  6. #include <touchgfx/hal/OSWrappers.hpp>  
9、添加屏写入buff代码:
556656827368f1da0c.png
  1. void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect)
  2. {
  3.     TouchGFXGeneratedHAL::flushFrameBuffer(rect);
  4.                 volatile uint16_t* buffer = getClientFrameBuffer()+(rect.y*240)+rect.x;//获取图像数据  
  5.     BSP_LCD_FillRGBRect(0, rect.x, rect.y,(uint8_t *)buffer, rect.width, rect.height);
  6. }
10、在底部生成一个可以供c调用的刷新函数:
64243682736d1208d6.png
  1. extern "C"
  2. void touchgfxSignalVSync(void)
  3. {
  4.         HAL::getInstance()->vSync();
  5.         OSWrappers::signalVSync();
  6.         HAL::getInstance()->swapFrameBuffers();
  7. }
11、在main.c中添加Tim7的回调函数:
95860682736ff62aa2.png
  1. extern void touchgfxSignalVSync(void);
  2. void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
  3. {
  4.         if (htim->Instance == TIM7)
  5.         {
  6.                 touchgfxSignalVSync();
  7.         }
  8. }
12、在Main中添加定时器开启的函数:
26438682737389e003.png
到此调用就结束了。注意,由于touchgfx为c++,因此不能启用c的微库,要不会编译报错。
【实验效果】
111516827379e496fb.jpg
53349682737ae4378a.png
【总结】
stm32cube生态非常优秀,只需要几步就可以移植好touchgfx。
552596827357234a7b.png
您需要登录后才可以回帖 登录 | 注册

本版积分规则

180

主题

830

帖子

12

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