所需要的硬件设备:正点原子mini开发板 (STM32F103RCT6,需要正点自带的240*320TFTLCD屏)
所需要的软件:
1.MDK5
2.Code::Blocks(PC上的IDE)
3.GUIBuilder(emwin官方的编辑器)
4.FlyMCU(用于烧录程序)
GUIBuilder、Code::Blocks在CSDN上能找到但是要下载币我把这些软件用腾讯微云链接分享出来:链接:https://share.weiyun.com/59wTGpP(不知道为啥百度云就是分享不出来就用腾讯微云弄吧)

想要将emwin移植到STM32上首先就需要在emwin在PC上做仿真,仿真的工具就是Code::Blocks这个IDE,这一步非常有用因为如果对新手而言直接移植会出现很多问题,emwinPC仿真详细教程见链接:(良心教程!每章都有详尽的代码)
http://www.neqee.com/list/?9_1.html

初步学习完PC上的仿真就可以开始移植了

我使用的是正点emwin库中的BUTTON位图显示例程和PC仿真的第三个例程2D位图显示,将PC上的例程移植到MDK工程中。

harmonyos移植到stm32 emwin移植到stm32_百度云


harmonyos移植到stm32 emwin移植到stm32_位图_02


(例程在正点原子论坛和链接教程里下载)

第一步,用CodeBlocks在PC上做仿真
仿真结果如下所示:

harmonyos移植到stm32 emwin移植到stm32_位图_03

我们需要的C文件就是Application目录下的bground.c和FramewinDLG.c文件。
而GUIDEMO_start.c中我们需要将MainTask移植走。

这是GUIDEMO_start.c中的MainTask函数部分

harmonyos移植到stm32 emwin移植到stm32_控件_04

以及另外两个.c文件

harmonyos移植到stm32 emwin移植到stm32_stm32_05

第二步,将MDK工程打开,将EMWIN_Demo目录下的文件全部移除并且将bground.c和FramewinDLG.c添加进来

harmonyos移植到stm32 emwin移植到stm32_harmonyos移植到stm32_06

然后打开main.c,通过main.c,我们可以了解到正点的例程用到了UCOSIII,我们找到emwin的任务,将原EMWIN_Demo目录内文件里的Buttonbmp_Demo();注释掉并且将MainTask函数里的内容放入emwin任务内,步骤如图下:

harmonyos移植到stm32 emwin移植到stm32_stm32_07

第三步,编译。

具体编译后结果如下:

harmonyos移植到stm32 emwin移植到stm32_harmonyos移植到stm32_08

产生这个原因的结果——RCT6的内存不够,我们做相应的处理。
首先,使用MDK的微库,减少ROM量。点击魔术棒,在target选项里,勾上Use MicroLiB。
然后,在C/C++中将优化等级开到最高(level 3)。过程如图所示:

harmonyos移植到stm32 emwin移植到stm32_百度云_09

harmonyos移植到stm32 emwin移植到stm32_百度云_10

继续编译,我们会发现仍然报错,原因还是内存不够导致。这时我们只能通过删减位图来达到减内存的目的。我们打开bground.c,将5000+行的数组删减致1000行,再编译就能通过了。这时HEX文件生成,就可以烧录了。(当然,删减后的图片就无法正常显示了)

harmonyos移植到stm32 emwin移植到stm32_百度云_11

最后结果如下所示:移植成功,但是由于内存的原因导致背景图没有移植过来。background控件后是一片灰白。

harmonyos移植到stm32 emwin移植到stm32_harmonyos移植到stm32_12

编者第一次移植emwin,如有错误,欢迎大家批评指正!