打印
[STM32H7]

STemWin 在 stm32H7 上的移植

[复制链接]
42|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
添加文件到工程
在工程模板目录下新建一个 emwin 文件夹,将 ST 官网下载的 H7 的 Cube 库下
Middlewares->ST->STemWin 拷贝到工程目录的 emwin 目录下,其中只保留 Config、inc、Lib、
OS 这几个文件夹,其它删除,如下图所示



使用特权

评论回复
沙发
顽强de板子|  楼主 | 2024-10-30 15:10 | 只看该作者
然后,将相应文件加入 MDK 工程,如下图所示

使用特权

评论回复
板凳
顽强de板子|  楼主 | 2024-10-30 15:30 | 只看该作者
添加头文件路径,如下图所示,至此,工程搭建完毕,下面我们开始移植

使用特权

评论回复
地板
顽强de板子|  楼主 | 2024-10-30 16:09 | 只看该作者
修改 GUIConf.c 文件,重新分配 STemWin 的动态缓存大小,如下图所示

使用特权

评论回复
5
顽强de板子|  楼主 | 2024-10-30 16:11 | 只看该作者
添加触摸支持
修改 GUIConf.h 文件,打开触摸开关,STemWin 默认是关闭触摸功能的,
添加触摸屏驱动文件,这里不再列出具体内容,请查看实验工程。触摸屏扫描,每隔
50ms 扫描一次,这里在 SysTick 中断服务函数中每隔 50ms 调用一次扫描函数 TS_Scan,如
下图所示

使用特权

评论回复
6
顽强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 工程,如下图所示:


使用特权

评论回复
7
顽强de板子|  楼主 | 2024-10-30 16:18 | 只看该作者
为 GUI 增加心跳,这里还是利用 SysTick 定时器,在 SysTick 中断服务函数中添加语句
OS_TimeMS++;最后,打开 GUIDEMO 的模块开关,在 GUIDEMO.h
#if 1 // Show all demos
#ifndef SHOW_GUIDEMO_AATEXT
#define SHOW_GUIDEMO_AATEXT (1)
#endif
#ifndef SHOW_GUIDEMO_AUTOMOTIVE
#define SHOW_GUIDEMO_AUTOMOTIVE (1)
#endif
#ifndef SHOW_GUIDEMO_BARGRAPH
#define SHOW_GUIDEMO_BARGRAPH (1)
#endif
#ifndef SHOW_GUIDEMO_BITMAP
#define SHOW_GUIDEMO_BITMAP (1)
#endif
#ifndef SHOW_GUIDEMO_COLORBAR
#define SHOW_GUIDEMO_COLORBAR (1)
#endif
#ifndef SHOW_GUIDEMO_CURSOR
#define SHOW_GUIDEMO_CURSOR (1)
#endif
#ifndef SHOW_GUIDEMO_FADING
#define SHOW_GUIDEMO_FADING (0)
#endif
#ifndef SHOW_GUIDEMO_GRAPH
#define SHOW_GUIDEMO_GRAPH (1)
#endif
#ifndef SHOW_GUIDEMO_ICONVIEW
#define SHOW_GUIDEMO_ICONVIEW (1)
#endif
#ifndef SHOW_GUIDEMO_IMAGEFLOW
#define SHOW_GUIDEMO_IMAGEFLOW (0)
#endif
#ifndef SHOW_GUIDEMO_LISTVIEW
#define SHOW_GUIDEMO_LISTVIEW (1)
#endif
#ifndef SHOW_GUIDEMO_RADIALMENU
#define SHOW_GUIDEMO_RADIALMENU (1)
#endif
#ifndef SHOW_GUIDEMO_SKINNING
#define SHOW_GUIDEMO_SKINNING (0)
#endif
#ifndef SHOW_GUIDEMO_SPEED
#define SHOW_GUIDEMO_SPEED (1)
#endif
#ifndef SHOW_GUIDEMO_SPEEDOMETER
#define SHOW_GUIDEMO_SPEEDOMETER (0)
#endif
#ifndef SHOW_GUIDEMO_TRANSPARENTDIALOG
#define SHOW_GUIDEMO_TRANSPARENTDIALOG (1)
#endif
#ifndef SHOW_GUIDEMO_TREEVIEW
#define SHOW_GUIDEMO_TREEVIEW (1)
#endif
#ifndef SHOW_GUIDEMO_VSCREEN
#define SHOW_GUIDEMO_VSCREEN (0)
#endif
#ifndef SHOW_GUIDEMO_WASHINGMACHINE
#define SHOW_GUIDEMO_WASHINGMACHINE (1)
#endif
#ifndef SHOW_GUIDEMO_ZOOMANDROTATE
#define SHOW_GUIDEMO_ZOOMANDROTATE (0)
#endif



使用特权

评论回复
8
顽强de板子|  楼主 | 2024-10-30 17:19 | 只看该作者
Main 函数你如下:
int main(void) 
{
System_Init();
//使能 CRC,STemWin 以此作为依据判断是否运行在 STM32 上
__HAL_RCC_CRC_CLK_ENABLE();
//初始化 EEPROM,触摸用到
while(EEPROM_Init() != EEPROM_OK)
{
}
GUIx_Init();
//显示器初始化
TS_Init();
//触摸屏初始化
SysTick_Init(systick_isr);
//触摸屏初始化完成后调用
LED_Init();
//STemWin 初始化
WM_SetCreateFlags(WM_CF_MEMDEV);
GUI_Init();
while(1)
{
MainTask();
}
}
这里要开启 CRC 时钟,这是 ST STemWin 做的保护,使其只能在 ST MCU
上运行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

26

帖子

0

粉丝