OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9959|回复: 10

STM32 战舰开发板ucos+emwin系列之___裸机移植emWin程序详细(寄存器版)

[复制链接]

3

主题

17

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2014-3-15
在线时间
2 小时
发表于 2014-8-20 15:07:51 | 显示全部楼层 |阅读模式

最近一段时间在学习ucos+emWin移植,有关ucos移植的资料无论是论坛还是书籍都可以找到,但emWin就不同了,在各个论坛混迹了一个多月总算是把emWin移植到自己的开发板上,下面就把我的移植过程分享给大家:

第一步,准备移植文件。

要想在自己开发板上裸机跑emWin,需要以下程序:开发板相关硬件驱动,emWin程序。

相关硬件驱动我是在原子大哥战舰开发板配套的程序基础上改写的,至于emWin网上可以下载。

                                                  

Software文件夹中主要是一些GUI开发会用到的小工具,移植不用管它。

OS中的GUI_X..c文件我们会用到

Lib中是emWin的核心文件,选取配套库文件即可

Inc中是emWin核心程序的头文件,需要整个文件的加载

Doc文件不用管,文档。

Config文件是移植需要自己动手更改的配置文件,我们会用到其中的一些文件。

至于与硬件相关的驱动程序,我改写了原子程序源码中的LCD驱动程序,原始的LCD驱动程序可以兼容不同驱动芯片型号,改写中我把那些兼容性代码都去掉了,并且更改了文件名称,在使用自己的LCD驱动程序时建议大家不要直接用lcd.c/.h来命名程序文件,程序中也请不要出现LCD名称的变量,编译会出错。

更改如下:

主要红框,不要直接写LCD

第二步,建工程加载文件

         

红框中加载了LCDLED程序,LED程序用于指示程序正常运行。

 

绿框中是GUI的配置文件,这三个文件都可以在Config文件夹中找到

 

粉框中是系统文件,玩过原子板子的同志们都懂得的。

 

蓝框是库文件,分别在Lib文件夹和OS文件夹中找到。

第三步,改写配置文件

这一步是移植的关键,主要针对gui_config分组文件进行改写,LCD驱动程序的改写上文已经提到了,这里不再赘述。

GUIConf.h文件:

主要是一些配置参数,这个根据情况改写就行,我没改。

GUIConf.c文件:

就加了一句这个:#define GUI_NUMBYTES  (1024*40),别的也没改。

LCDConf_FlexColor_template.c文件:

这个改动比较多,

首先,加载头文件:

在这个文件中,会有一些针对LCD硬件的基本操作,比如向寄存器里写数啊什么的,所以有很多人在这个文件中定义了LCD的寄存器,但自己做过LCD驱动的同志都应该已经在驱动程序里定义了寄存器,所以我直接包含了头文件用于调用。


这个结构体就是我们定义的寄存器地址了,这也是为啥我把
LCD改成了LCD0.。。。。

 

接下来,自行填写local function

其实就是上文提到的一些基本操作,往寄存器里写数啊什么的。。。。这在LCD驱动了也是写过的。

很简单哈,

再接下来是LCD_X_Config函数,这个改动很小,只有两处,一个是方向,我把它注释掉了,得到竖屏,加上就是横屏

还有一处是看论坛上一位先驱做的,但不知道为啥那么改,姑且改了吧

最后的LCD_X_DisplayDriver程序,因为我想用自己的初始化程序(据说emWin是提供兼容性很好的驱动程序的,但我没有深入研究)所以在case后边添加了初始化程序

好了,配置文件就改好了。

最后一步,主程序。

其实主程序没什么可说的,只是提醒工程中要加载好所以头文件,在调用GUI_Init()文件之前请务必一定要开启CRC时钟,为啥我也不知道,但是不开就是不行。

编译后可能会出现#include LCDConf.h”的错误,我直接注释掉了。。。。然后整个世界都安静了。

供上源码。

基本移植emWin点亮LCD之后,今天加上触摸屏的移植操作。

首先先来介绍下需要准备的程序:

1Touch基本驱动程序,这个我用的原子大哥自带的,进行了删减修改。

2、触摸板与emWin程序的接口程序,这个需要自己编写,不过很简单。

3、时钟程序,这个程序需要提供给GUI时钟,利用系统时钟中断做的,参照原子大哥delay程序改写。

4touch校准程序,这个可以在emWin的仿真程序中获得,该程序位于文件夹Sample\Tutorial下,程序名称为TOUCH_Sample.c

下面就来和大家详细说说移植过程:

首先,将touch基本驱动程序加载到工程中:

这里没有加载有关IIC的程序是因为把touch程序中有关校准的程序都删掉了,所以没有加载,详见源码。

接着我们新建一个C文件并加载到工程中,用来编写与GUI的接口函数:


这个文件主要是
GUI运行时需要调用的,里面包含四个函数:


这四个函数主要是用来测量出
XY轴的模拟电压数据并交由emWin的上层来处理触摸输入,我们需要根据触摸屏驱动器来编写,所以我根据原子大哥的驱动直接调用了TP_Read_XY2(,)函数,并返回测试数据。前两个函数可以空着,只要后两个返回数据就可以了,这四个函数是由GUI_TOUCH_Exec()函数依次调用的。

这四个函数不用外加头文件声明函数,是因为在GUI.h中已经声明了,如图:

紧接着,我们进行时钟函数的编写,emWin运行时,会通过GUI_TOUCH_Exec()函数调用以上四个函数,来达到获取触摸数据的目的,而触摸数据需要定时更新,GUI_TOUCH_Exec()函数需要被定时调用,所以需要我们进行时钟函数的编写。

在时钟的选取上,看到论坛有人用定时器做,没有问题,但我选择的是用系统时钟中断来进行函数调用,这样做的原因主要是为了以后方便移植ucos-II操作系统,但是原子大哥的delay函数设计只有开启OS才会开启系统时钟中断,所以我们需要单独改写一下初始化程序和延时程序,等到以后移植操作系统后可以直接加在中断处理程序中。

初始化程序详见源码,这里贴出中断处理程序:


时钟函数中我设置每
1ms中断一次,每10ms调用一次touch驱动函数。

最后我们需要调用emWin例程的touch校准函数


运行后发现按压触摸屏
AD值有反应但是光标没有反应,这是因为我们在LCDConf_FlexColor_Template.c中少调用了两个函数导致无法进行校准。

这两个函数中TOUCH_AD_TOPTOUCH_AD_BOTTOMTOUCH_AD_LEFTTOUCH_AD_RIGHT这四个值在上面定义了,


而这四个值的确认,我是在没有调用校准函数时(也就是运行
GUI demo时光标没有反应的时候)按压左上角和右下角时得到xyAD值,左上角xTOUCH_AD_LEFTyTOUCH_AD_TOP

右下角xTOUCH_AD_RIGHTyTOUCH_AD_BOTTOM。确认四个值后加入这两个函数运行光标就可以动了,好了到此我完成了touch的驱动移植。
附上源码。

GUI.zip

2.4 MB, 下载次数: 879

GUI+touch.rar

2.27 MB, 下载次数: 926

菜鸟一枚,还请大家批评指正
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2014-8-20 15:36:59 | 显示全部楼层
谢谢分享。六字补丁。
于20150522停用该账号:http://www.microstar.club
回复 支持 反对

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-8-20 16:00:57 | 显示全部楼层
谢谢分享。。
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-8-20 17:47:53 | 显示全部楼层
顶!!谢谢分享。。。。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-20 19:26:54 | 显示全部楼层
不错,谢谢分享!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-20 19:27:33 | 显示全部楼层
你的ucos没移植,好像和题目不挂钩啊,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

17

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2014-3-15
在线时间
2 小时
 楼主| 发表于 2014-8-20 19:51:09 | 显示全部楼层
回复【6楼】Badu_Space:
---------------------------------
一步一步来嘛,后续会继续写的
菜鸟一枚,还请大家批评指正
回复 支持 反对

使用道具 举报

120

主题

7878

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12012
金钱
12012
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-8-21 08:04:39 | 显示全部楼层
回复【7楼】Daisy:
---------------------------------
加油!!!!!!!!!!!!!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

3

主题

17

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
215
金钱
215
注册时间
2014-3-15
在线时间
2 小时
 楼主| 发表于 2014-9-1 10:20:37 | 显示全部楼层
更改BUG:
在调试MessageBox时出现显示创建对话框点击确定按钮无反应,查看时钟及配置问题后更改如下:

以前是直接返回touch创建结构体中数据,试验后有问题,更改后messageBox可以正常使用。
菜鸟一枚,还请大家批评指正
回复 支持 反对

使用道具 举报

18

主题

51

帖子

0

精华

初级会员

Rank: 2

积分
172
金钱
172
注册时间
2016-3-2
在线时间
56 小时
发表于 2016-7-26 22:01:17 | 显示全部楼层
有没UCOSII+EMWIM移植的?
回复 支持 反对

使用道具 举报

8

主题

55

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
金钱
314
注册时间
2017-1-14
在线时间
48 小时
发表于 2017-12-27 12:00:33 | 显示全部楼层
谢谢,分享!
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 00:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表