完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、硬件要求小系统 (无窗口管理器)
•RAM:100字节 • 堆栈:600字节 •ROM:10-25 kb(取决于所使用的功能) 大系统 (包含窗口管理器和小工具) •RAM:2-6 kb(取决于所需的窗口数) • 堆栈:1200-1800字节 (取决于所使用的功能) •ROM:30-60 kb(取决于所使用的功能) 请注意,如果应用程序使用了很多字体,则对ROM的要求会提高。上述所有值都是粗略估算值,不 保证能正常使用。 重要说明: (0)由于这个移植教程是去年过年的时候做的,用的是5.16,这就不再做个5.20的移植了,方法是一样的。 (1)emWin手册里面有这样一句话:“驱动接口的改变始于emWin V5。不再支持针对emWin V4 或更早版本开发的老显示驱动”。 (2)尽管emWin提供了大部分屏的驱动,但是不能包含所有,这篇移植文档就因此而生。不管是emWin已经支持的,还是没有提供支持的,均可采用这种方法。 二、移植前的准备工作 1、固件库的获取 首先, emWin 库来源有两个: (a).在MDK(KEIL)软件目录下获取 路径:MDK5.XX D:Program Files (x86)Keil_5ARMPackKeilMDK-Middleware5.1.4emWin MDK4.XX C:Keil4.73ARMSeggeremWin (b).在ST官网下载 下载地址:http://www.st.com/web/en/catalog/tools/PF259225# 这里我们用第二个,因为 MDK 目录下的 emWin 最新版本对于大家不是好获得(MDK5.0 才 是5.22 , MDK4.7 下 是 5.16 的 ) , 而 ST 公 司 的 那 个 好 下 载 。目前最新的是 5.22的版本,打开页面,登陆后点击下的 Download, 即可下载。https://bbs.elecfans.com/forum.php?mod=attachment&aid=MzQ4NTY4fDUwN2IxZjZhMDU1YTYwOWZhMmMxNjJmNjQ2YmE2ZDdifDE3MzIzNtiyMzA%3D&request=yes&_f=.rar解 压 缩 下 载 的 压 缩 包 , 打 开 文 件 夹 , 我 们 看 到: Libraries: 里面就有我们需要的 STemWin 库 Project:这个是 ST 的工程文件,以官方的 eval 板子建的工程 Utilities: 这个是文件系统和 eval 板子的硬件驱动程序 打开Libraries,就会看到我们需要的STemWinLibrary522文件夹。 内容如下图: 2、注册RL_ARM 其过程和使用*注*册*机*注册MDK过程一样,如下图: 三、开始移植 1、液晶驱动程序 这里借用正点原子的液晶屏驱动程序,复制原子的lcd.c和lcd.h文件到工程里(或直接使用原子例程里的 “实验11 TFT液晶显示实验”)。 同时,记得在主函数里调用LCDx_Init();进行液晶屏初始化。 注意: 工程里的 lcd.c 和 lcd.h 改为 ili93xx.c 和 ili93xx.h 后重新加入到工程里, LCD_Init()也改为 LCDx_Init()。 因为这里和emWin固件库里的有同名了,防止冲突所以在这里要修改。 下面的程序由 ili93xx.h 中剪切到 ili93xx.c 中,至于为什么做以上工作,移植过 ucGUI 的再知 道不过了,这里就不多说了,不知道的可以百度哦。 typedef struct { u16 LCD_REG; u16 LCD_RAM; } LCD_TypeDef; #define LCD_BASE ((u32)(0x6C000000 | 0x000007FE)) #define LCD ((LCD_TypeDef *) LCD_BASE)2、加入STemWin5.22固件库文件 加入后的工程截图如下: (a). GUIConf.c和LCDConf_FlexColor_Template.c两个文件路径如下: (b).GUI_X.C文件路径如下:(灵活选择。因为这里是无操作系统的,所以使用GUI_X.c文件) (c).lib文件路径如下:(灵活选择。因为这里使用Keil开发工具,STM32f103为CM3内核) 3、修改程序,制作emWin与液晶屏驱动程序接口函数 (a).修改GUIConf.c 文件 中的 GUI_NUMBYTES 为 1024*50, 50 可以小点,不要太大,太大编译器会编译会错误的。 (b).修改 LCDConf_FlexColor_Template.c 这个文件 先将我们的 ili93xx.h 头文件包含进来,接下来加入以下两行程序,至于后面的地址为什么会这样,这是 LCD 显示里的哦。 #define LCD_REG_ADDRESS *(__IO uint16_t *)(0x6C000000) #define LCD_DATA_ADDRESS *(__IO uint16_t *)(0x6C000800) 再就是下面的几个程序,添加红色部分程序 static void LcdWriteReg(U16 Data) { // ... TBD by user LCD_REG_ADDRESS=Data; } static void LcdWriteData(U16 Data) { // ... TBD by user LCD_DATA_ADDRESS=Data; } static void LcdWriteDataMultiple(U16 * pData, int NumItems) { while (NumItems--) { // ... TBD by user LCD_DATA_ADDRESS=*pData++; } } static void LcdReadDataMultiple(U16 * pData, int NumItems) { *pData = LCD_DATA_ADDRESS; while (NumItems--) { // ... TBD by user *pData++=LCD_DATA_ADDRESS; } } 此时重要的函数来喽 void LCD_X_Config(void)Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y; 这句是显示方向的,默认的是这个,弄好后,下进去板子,看是否正常显示,不正常显示可以试试修改这里哦。 GUIDRV_FlexColor_SetFunc(pDevice, &PortAPI, GUIDRV_FLEXCOLOR_F66709, GUIDRV_FLEXCOLOR_M16C0B16); GUIDRV_FLEXCOLOR_F66709 这个东西很重要,移植的时候我就栽在这里啦,这是对控制芯 片的支持,具体请看最新手册 5.22 的( P991),也有中文的 5.12,不过 5.22 支持的很多。 最后就是 main 函数喽 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); GUI_Init(); GUI_DispString("Hello STemWin!"); 记住这句一定要加上 RCC_AHBPeriphClockCmd(RCC_AHBPeriph_CRC, ENABLE); 四、加入 demo,让 emWin 炫起来 1、加入demo文件 在main.c里加入头文件 guidemo.h 然后在主函数里加入 GUIDEMO_Main(); 好,编译程序,下进去,就可以看到经典的开始画面了,但是没有动,右下角没有像别人的视频里的滚动!这是因为我们还没有启动 emWin 的心跳哦! 2、启动emWin心跳 在HARDWARE 里加入 gui_time.c 和 gui_time.h 文件, 具体源码见下图: 其实就是循环调用OS_TimeMS++;让 emWin 跳动起来。 别忘了,主函数要调用定时器的初始化哦! 我们再编译, 程序跑起, 哈哈, 是不是动了。但是我们只看到只有一个示例在循环显示。 OS_TimeMS在emWin的这里进行了调用: 3、打开多个demo示例开关 打开 GUIDEMO.h 文件, 配置如下图,将后面括号里的“0”改为“1”即为打开此示例,记住后面每个项目的开关要关掉很多的,不然会有错误的。 我开了 8 个。 编译后下载进去,就可以看到有8个画面在循环显示。 五、加入触摸屏 1、触摸驱动程序 这里借用正点原子的液晶屏驱动程序,复制原子的touch.c和touch.h文件到工程里(或直接使用原子例程里的 “触摸屏实验”)。 同时,记得在主函数里调用TP_Init();进行触摸屏初始化。 2、修改程序,制作emWin与触摸屏的接口函数 由于我们用的 5.22 版本没有关于 touch的 C 文件,我便从 5.16 那儿拷过来了GUI_X_Touch_Analog.c,把这个文件加入到 StemWin5.22组里, 因为直接就用的原子的触摸了, 我们就直接调用 TP_Read_XY2(&x,&y);这个函数, 把他放进GUI_TOUCH_X_MeasureX(void)和 GUI_TOUCH_X_MeasureY(void)这两个函数里, 其实最后由这个函数 GUI_TOUCH_Exec()循环调用, 来一直读 AD 的值。 注意: 如果完成第3步后,发现触摸屏方向不对,可以试着修改上面加入的TP_Read_XY2(&x,&y);里的&x和&y的位置。 同时,要 把GUI_TOUCH_Exec();这个函数也要放进前一步建的 gui_time.c 文件里, 具体见下图: 3、通过示例确定校准值 这里的校准值就是取得 A/D 转换器的最小值和最大值。 emWin 需要用这些值来把测量结果转换为以像素表示的触摸位。这 4 个值为: emWin 的示例文件夹中有一个小程序,可用来获取触控面板的这些值。 该程序位于文 件夹 SampleTutorial 下,程序名称为 TOUCH_Sample.c。 在硬件上运行该示例显示效果如下图: 接下来我们在 LCDConf_FlexColor_Template.c 文件中加入上面提到的四个值 #define TOUCH_AD_TOP 221 #define TOUCH_AD_BOTTOM 3900 #define TOUCH_AD_LEFT 160 #define TOUCH_AD_RIGHT 3883 后面的数字只是临时写的, 然后我们再新建 gui_touch.c 文件, 这就是 TOUCH_Sample.c 文件的程序, 我们拷贝过来到 gui_touch.c 中, 如下图所示: 然后,main.c里程序如下图: 然后下载程序, 界面如下图: 这是确定左上角的值,记住 一定要触摸,蓝色的 X 就是 TOUCH_AD_LEFT 的值, Y 就是 TOUCH_AD_TOP 的值。 同理,拖动光标到右下角,蓝色 X 的值为 TOUCH_AD_RIGHT, Y值 为 TOUCH_AD_BOTTOM 。这 样,前 面 提 到 的 四 个 值 就 已 经 确 定 了,同 时 改 掉LCDConf_FlexColor_Template.c 里的那四个值。 4、在初始化程序LCD_X_Config 函数里调用 GUI_TOUCH_Calibrate 函数 如下图,加入下面两句程序: GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 240, TOUCH_AD_TOP, TOUCH_AD_BOTTOM); GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 320, TOUCH_AD_LEFT, TOUCH_AD_RIGHT); 至此,emWin加触摸屏的移植完成! |
|
相关推荐
3 个讨论
|
|
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
551 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
910 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
575 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
572 浏览 0 评论
1221 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11767 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 16:57 , Processed in 0.721186 second(s), Total 52, Slave 42 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号