[STM32H7] STemWin 在 stm32H7 上的移植

[复制链接]
 楼主| 顽强de板子 发表于 2024-10-30 15:05 | 显示全部楼层 |阅读模式
添加文件到工程
在工程模板目录下新建一个 emwin 文件夹,将 ST 官网下载的 H7 的 Cube 库下
Middlewares->ST->STemWin 拷贝到工程目录的 emwin 目录下,其中只保留 Config、inc、Lib、
OS 这几个文件夹,其它删除,如下图所示

519466721dad4c4371.png

 楼主| 顽强de板子 发表于 2024-10-30 15:10 | 显示全部楼层
然后,将相应文件加入 MDK 工程,如下图所示
242316721daf2ef1e8.png
 楼主| 顽强de板子 发表于 2024-10-30 15:30 | 显示全部楼层
添加头文件路径,如下图所示,至此,工程搭建完毕,下面我们开始移植
38516721dc2222fee.png
 楼主| 顽强de板子 发表于 2024-10-30 16:09 | 显示全部楼层
修改 GUIConf.c 文件,重新分配 STemWin 的动态缓存大小,如下图所示
353456721e9c72901c.png
 楼主| 顽强de板子 发表于 2024-10-30 16:11 | 显示全部楼层
添加触摸支持
修改 GUIConf.h 文件,打开触摸开关,STemWin 默认是关闭触摸功能的, 360576721ea070676d.png
添加触摸屏驱动文件,这里不再列出具体内容,请查看实验工程。触摸屏扫描,每隔
50ms 扫描一次,这里在 SysTick 中断服务函数中每隔 50ms 调用一次扫描函数 TS_Scan,如
下图所示
316876721ea3153a20.png
 楼主| 顽强de板子 发表于 2024-10-30 16:15 | 显示全部楼层
加入 Demo 演示
在工程目录 STemWin 目录下新建 Application 文件夹,其下拷贝 Demo 演示文件,这里
我们从 MDK 安装目录下提取,MDK 版本为 5.17,演示文件路径如下:
ARM\Pack\Keil\MDK-Middleware\6.5.0\emWin\Sample\Application\GUIDemo
将文件加入 MDK 工程,如下图所示:
699836721eb05ac6f6.png

 楼主| 顽强de板子 发表于 2024-10-30 16:18 | 显示全部楼层
为 GUI 增加心跳,这里还是利用 SysTick 定时器,在 SysTick 中断服务函数中添加语句
OS_TimeMS++;最后,打开 GUIDEMO 的模块开关,在 GUIDEMO.h
  1. #if 1 // Show all demos
  2. #ifndef SHOW_GUIDEMO_AATEXT
  3. #define SHOW_GUIDEMO_AATEXT (1)
  4. #endif
  5. #ifndef SHOW_GUIDEMO_AUTOMOTIVE
  6. #define SHOW_GUIDEMO_AUTOMOTIVE (1)
  7. #endif
  8. #ifndef SHOW_GUIDEMO_BARGRAPH
  9. #define SHOW_GUIDEMO_BARGRAPH (1)
  10. #endif
  11. #ifndef SHOW_GUIDEMO_BITMAP
  12. #define SHOW_GUIDEMO_BITMAP (1)
  13. #endif
  14. #ifndef SHOW_GUIDEMO_COLORBAR
  15. #define SHOW_GUIDEMO_COLORBAR (1)
  16. #endif
  17. #ifndef SHOW_GUIDEMO_CURSOR
  18. #define SHOW_GUIDEMO_CURSOR (1)
  19. #endif
  20. #ifndef SHOW_GUIDEMO_FADING
  21. #define SHOW_GUIDEMO_FADING (0)
  22. #endif
  23. #ifndef SHOW_GUIDEMO_GRAPH
  24. #define SHOW_GUIDEMO_GRAPH (1)
  25. #endif
  26. #ifndef SHOW_GUIDEMO_ICONVIEW
  27. #define SHOW_GUIDEMO_ICONVIEW (1)
  28. #endif
  29. #ifndef SHOW_GUIDEMO_IMAGEFLOW
  30. #define SHOW_GUIDEMO_IMAGEFLOW (0)
  31. #endif
  32. #ifndef SHOW_GUIDEMO_LISTVIEW
  33. #define SHOW_GUIDEMO_LISTVIEW (1)
  34. #endif
  35. #ifndef SHOW_GUIDEMO_RADIALMENU
  36. #define SHOW_GUIDEMO_RADIALMENU (1)
  37. #endif
  38. #ifndef SHOW_GUIDEMO_SKINNING
  39. #define SHOW_GUIDEMO_SKINNING (0)
  40. #endif
  41. #ifndef SHOW_GUIDEMO_SPEED
  42. #define SHOW_GUIDEMO_SPEED (1)
  43. #endif
  44. #ifndef SHOW_GUIDEMO_SPEEDOMETER
  45. #define SHOW_GUIDEMO_SPEEDOMETER (0)
  46. #endif
  47. #ifndef SHOW_GUIDEMO_TRANSPARENTDIALOG
  48. #define SHOW_GUIDEMO_TRANSPARENTDIALOG (1)
  49. #endif
  50. #ifndef SHOW_GUIDEMO_TREEVIEW
  51. #define SHOW_GUIDEMO_TREEVIEW (1)
  52. #endif
  53. #ifndef SHOW_GUIDEMO_VSCREEN
  54. #define SHOW_GUIDEMO_VSCREEN (0)
  55. #endif
  56. #ifndef SHOW_GUIDEMO_WASHINGMACHINE
  57. #define SHOW_GUIDEMO_WASHINGMACHINE (1)
  58. #endif
  59. #ifndef SHOW_GUIDEMO_ZOOMANDROTATE
  60. #define SHOW_GUIDEMO_ZOOMANDROTATE (0)
  61. #endif



 楼主| 顽强de板子 发表于 2024-10-30 17:19 | 显示全部楼层
Main 函数你如下:
  1. int main(void)
  2. {
  3. System_Init();
  4. //使能 CRC,STemWin 以此作为依据判断是否运行在 STM32 上
  5. __HAL_RCC_CRC_CLK_ENABLE();
  6. //初始化 EEPROM,触摸用到
  7. while(EEPROM_Init() != EEPROM_OK)
  8. {
  9. }
  10. GUIx_Init();
  11. //显示器初始化
  12. TS_Init();
  13. //触摸屏初始化
  14. SysTick_Init(systick_isr);
  15. //触摸屏初始化完成后调用
  16. LED_Init();
  17. //STemWin 初始化
  18. WM_SetCreateFlags(WM_CF_MEMDEV);
  19. GUI_Init();
  20. while(1)
  21. {
  22. MainTask();
  23. }
  24. }
这里要开启 CRC 时钟,这是 ST STemWin 做的保护,使其只能在 ST MCU
上运行

您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

67

帖子

0

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

4

主题

67

帖子

0

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