OpenEdv-开源电子网

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

STemWin522触摸移植战舰板子

[复制链接]

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
发表于 2014-6-27 13:32:36 | 显示全部楼层 |阅读模式
之前分享过STemWin522的移植帖子http://www.openedv.com/posts/list/28316.htm
现在将触摸加上,最近完成,分享给有需要的坛友,高手可以漠视,呵呵

用到的资源:
1、实验平台:STM32_WarShip_V2.1
2、GUI代码:STemWin522(gui已经在战舰上移植成功)

一、触摸移植工程来自之前发过的一个帖子,具体可以到上面链接下载
二、首先,增加电阻屏触摸驱动函数,我这里直接就用原子哥的驱动了,省事,呵呵。。。将这个驱动拷贝到我们的工程里面


三、在 MDK 中添加文件,这里我自己建立了一个“emWin_Touch.c”的文件,这个文件主要是一些获取触摸坐标数值的函数,不知道那些的话,直接在“GUIConf.h”这个文件中将这个宏定义“GUI_SUPPORT_TOUCH”有 0 变为 1,再编译一下,就知道需要些什么函数了,MDK 中文件目录


红色框框的就是我新建立的文件了(我新建了一个文件“emWin_OS.c”代替了“GUI_X.c”文件,方便在有操作系统的情况下改动) ,蓝色框框的是我为了方便触摸校准而增加的,具体后面再解释,绿色框框的就是原子哥的 Touch 驱动和 USMART 调试组件了。

四、剪刀手出击
1、我在新建的“emWin_Touch.c”文件中填写的函数有如下几个,具体内容请看代码
[mw_shl_code=c,true]void GUI_TOUCH_X_ActivateX(void); void GUI_TOUCH_X_ActivateY(void); void GUI_TOUCH_X_Disable (void); int GUI_TOUCH_X_MeasureX(void); // 获取触摸 X 坐标值 int GUI_TOUCH_X_MeasureY(void); //获取触摸 Y 坐标值 void GUI_TOUCH_X_GetXY(void); //获取触摸参数的 void Touch_Adjust(void); // 触摸校准函数[/mw_shl_code]

这个校准函数在 MDK5.0 版本的安装路径下就有一个叫“TOUCH_Sample.c”的文件里面放着,直接 copy 过来用即可

在文件的开头定义了这么几个参数变量


这几个变量与触摸有关的,并且是保存到了 EEPROM 中的,这样更加的方便触摸的校准,试过用原子哥的触摸校准数据,下载进去不对劲,不知道什么原因,没仔细查,呵呵

2、在滴答定时器中断服务函数中添加如下内容
[mw_shl_code=c,true]void SysTick_Handler(void) { OS_TimeMS++; LEDdly++; if(OS_TimeMS%50 == 0) { GUI_TOUCH_Exec(); // LED0 = !LED0; } if(LEDdly == 500) { LEDdly = 0; LED0 = ~LED0; } }[/mw_shl_code]

GUI_TOUCH_Exec();这个函数就是调用获取坐标数据的,具体请参考自带手册中第 909 页有这么一段说明,就是每秒钟刷新这个函数 100 次以上



3、在 main 文件中调用初始化函数,具体怎么做不用教了吧,呵呵

五、为了调试的方便, 利用到了原子哥的 USMART 调试组件, 具体怎么用请自行搜索论坛,将 24cxx 的读写函数添加进这个组件中,详细请看代码,在 main 函数中将各函数调用顺序做下变化,请参考代码

六、上面几步都完成之后就编译改错即可。下载到开发板上,运行,第一次下载按住 KEY0轻触按键,然后复位开发板,进入触摸校准模式,此时分别点击屏幕的进行校准。

1、点击左上角,得到数据



屏 幕 蓝 色 字 符 显 示 的 X 就 是 TOUCH_AD_x0 的 数 值 , 蓝 色 字 符 显 示 的 Y 就 是TOUCH_AD_y0 的数值

2、点击右下角,得到数据



屏 幕 蓝 色 字 符 显 示 的 X 就 是 TOUCH_AD_x1 的 数 值 , 蓝 色 字 符 显 示 的 Y 就 是TOUCH_AD_y1 的数值
3、将对应的值用 USMART 调试组件写入到 EEPROM 中,写入地址我这里定义成了这个,具体大家就随意了
#define Touch_Adjust_Base 0xf0

至于写入数据的组合方式就看这个文件“emWin_Touch.c”开头处的注释了

七、完成了触摸校准值写入 EEPROM 中之后,直接按开发板上的复位按键复位一下即可,开始运行 demo 了,用手指碰触一下屏幕,发现左上角的鼠标箭头位置变化了,按住屏幕拖动的时候,发现这个工程有个不知道什么的 bug 吧,可能没设置好还是。 。 。



看到上图红色框框的地方没,就是这里了,有这个阴影存在,目前还没找到问题在哪里。


1、这里要说明一下的是在这个帖子里http://www.openedv.com/posts/list/28316.htm回应67楼坛友的,前段时间比较忙,最近完成的,对他表示抱歉,要他等这么长时间
2、为了强迫症患者,这里顺带也做了DFU升级方式下载,速度快,具体效果参考这里http://www.openedv.com/posts/list/28770.htm
3、DFU模式跑的话中断问题的处理方法请移步到这里http://www.openedv.com/posts/list/28635.htm
4、附件:IAP升级的BootLoad工程、STemWin+Touch工程、STemWin+Touch(DFU模式)工程、移植笔记STemWin_V5.22触摸移植.PDF

STemWin_Touch(DFU).zip

27.13 MB, 下载次数: 2272

STemWin_V5.22触摸移植.pdf

2.65 MB, 下载次数: 4431

STemWin_Touch.zip

27.01 MB, 下载次数: 3960

IAP_USB_Bootloader_V1.0.1.zip

400.3 KB, 下载次数: 1116

现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2014-2-24
在线时间
4 小时
发表于 2014-6-27 17:18:33 | 显示全部楼层
纳尼,没人顶?我来顶大神一下!感谢分享!
回复 支持 反对

使用道具 举报

13

主题

89

帖子

0

精华

初级会员

Rank: 2

积分
188
金钱
188
注册时间
2014-3-11
在线时间
5 小时
发表于 2014-6-27 17:25:14 | 显示全部楼层
楼主的移植学习过程才像个真正学习STM32的,不像我,老是下载别人搞好的模仿
回复 支持 反对

使用道具 举报

33

主题

481

帖子

2

精华

论坛元老

Rank: 8Rank: 8

积分
5075
金钱
5075
注册时间
2013-10-4
在线时间
654 小时
发表于 2014-6-27 20:24:39 | 显示全部楼层
顶。。 有空学习一下
回复 支持 反对

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2014-6-27 20:35:27 | 显示全部楼层
顶楼主,多谢分享啊。emwin没搞过,不过ucgui的触摸屏移植过。
开往春天的手扶拖拉机
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2014-7-12 11:43:09 | 显示全部楼层
顶楼主。谢谢分享
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-12 13:29:29 | 显示全部楼层
回复【6楼】Admin:
---------------------------------
感谢版主!
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

48

主题

537

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1367
金钱
1367
注册时间
2014-2-13
在线时间
169 小时
发表于 2014-7-12 18:07:34 | 显示全部楼层
顶贴是美德!!!
回复 支持 反对

使用道具 举报

头像被屏蔽

6168

主题

7036

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
19705
金钱
19705
注册时间
2012-12-27
在线时间
25 小时
发表于 2014-7-13 14:36:17 | 显示全部楼层
(, 下载次数: 9)
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-20 13:20:18 | 显示全部楼层
回复【3楼】蓝色沸点:
---------------------------------
自己手痒了就动手,写出来方便新手学习和借鉴经验的,很多还是借鉴原子哥的经验呢,呵呵
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-20 13:20:55 | 显示全部楼层
回复【9楼】xouou_53320:
---------------------------------
图片是老师的偶像?嘿嘿
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-20 13:21:49 | 显示全部楼层
回复【8楼】solo:
---------------------------------
谢谢:-P^o^!!!大家互相学习
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

11

主题

52

帖子

0

精华

初级会员

Rank: 2

积分
170
金钱
170
注册时间
2013-10-27
在线时间
12 小时
发表于 2014-7-21 16:31:30 | 显示全部楼层
鼠标阴影是下面的原因: (LCD9341屏)
void LCD_X_Config(void) {
  GUI_DEVICE * pDevice;
  CONFIG_FLEXCOLOR Config = {0};
  GUI_PORT_API ortAPI = {0};
  //
  // Set display driver and color conversion
  //
  pDevice = GUI_DEVICE_CreateAndLink(GUIDRV_FLEXCOLOR, GUICC_565, 0, 0);
  //
  // Display driver configuration, required for Lin-driver
  //
  LCD_SetSizeEx (0, XSIZE_PHYS , YSIZE_PHYS);
  LCD_SetVSizeEx(0, VXSIZE_PHYS, VYSIZE_PHYS);

  
  //
  // Orientation
  //

//    Config.FirstCOM = 0;//modify by fire
//    Config.FirstSEG = 0;//modify by fire  
//  Config.Orientation = GUI_SWAP_XY | GUI_MIRROR_Y;
//  Config.Orientation = GUI_SWAP_XY;
    Config.NumDummyReads = 2;//modify by fire ?????????????????§??
    GUIDRV_FlexColor_Config(pDevice, &Config);
  //
  // Set controller and operation mode
  //
  ortAPI.pfWrite16_A0  = LcdWriteReg;
  ortAPI.pfWrite16_A1  = LcdWriteData;
  ortAPI.pfWriteM16_A1 = LcdWriteDataMultiple;
  ortAPI.pfReadM16_A1  = LcdReadDataMultiple;
  GUIDRV_FlexColor_SetFunc(pDevice,&ortAPI,GUIDRV_FLEXCOLOR_F66709,GUIDRV_FLEXCOLOR_M16C0B16);
  //GUIDRV_FlexColor_SetFunc(pDevice,&ortAPI,GUIDRV_FLEXCOLOR_F66708,GUIDRV_FLEXCOLOR_M16C0B16);
  
  
  /* modify by fire ?è?????????? */
GUI_TOUCH_SetOrientation((GUI_MIRROR_X * LCD_GetMirrorXEx(0)) |
              (GUI_MIRROR_Y * LCD_GetMirrorYEx(0)) |
              (GUI_SWAP_XY  * LCD_GetSwapXYEx (0)));
              
  /* modify by fire ?è????????×? */
  GUI_TOUCH_Calibrate(GUI_COORD_X, 0, XSIZE_PHYS-1, GUI_TOUCH_AD_LEFT, GUI_TOUCH_AD_RIGHT);
  GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, YSIZE_PHYS-1, GUI_TOUCH_AD_TOP, GUI_TOUCH_AD_BOTTOM);
              
}
向上面程序一样就行了
既然来了,就留下您的痕迹呗......
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-22 08:07:32 | 显示全部楼层
回复【13楼】glyxz1990:
---------------------------------
嗯,有空试下你这个,非常感谢! 

我已经搞好了,在这里最后有说明http://www.openedv.com/posts/list/36299.htm
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-24 17:13:10 | 显示全部楼层
回复【13楼】glyxz1990:
---------------------------------
嗯,你这个方法也是可以的,不过比我那个帖子里面的复杂一点,呵呵,但是不知道是不是那样子造成的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2014-7-28 08:25:36 | 显示全部楼层
回复【13楼】glyxz1990:
---------------------------------
有空就测试了一下,你这个方法好像是间接性解决的,你看,我的测试代码,这样对不对?



如果while前面没加一句的话,第0组数据就丢失了
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2012-8-3
在线时间
9 小时
发表于 2014-12-31 23:48:21 | 显示全部楼层
学 习了。。谢谢楼主分享
回复 支持 反对

使用道具 举报

4

主题

13

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2013-4-1
在线时间
0 小时
发表于 2015-3-15 18:26:14 | 显示全部楼层
顶大神 学习了
工作
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

初级会员

Rank: 2

积分
65
金钱
65
注册时间
2013-8-23
在线时间
17 小时
发表于 2015-3-24 15:00:21 | 显示全部楼层
大神之作   必须学习
回复 支持 反对

使用道具 举报

4

主题

61

帖子

0

精华

初级会员

Rank: 2

积分
97
金钱
97
注册时间
2013-12-3
在线时间
0 小时
发表于 2015-4-8 14:36:47 | 显示全部楼层
顶啊 学习了
帮助别人就是帮助自己!
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-29
在线时间
1 小时
发表于 2015-8-21 21:08:32 | 显示全部楼层
有没有没有fsmc移植的啊   还是8bit接口移植的  我的16位数据要写两次才能写进去   现在是写不进去啊   黑屏  什么也没有
回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-8-21 21:18:45 | 显示全部楼层
回复【21楼】放手一搏zrh:
---------------------------------
首先你将屏幕驱动搞好在说,添加打点和读点函数即可
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-29
在线时间
1 小时
发表于 2015-8-21 22:07:57 | 显示全部楼层
回复【22楼】八度空间:
---------------------------------
是好的啊,之前  我移植了ucgui  是没有问题的 。现在移植stemwin    gui_int()  只有一半的屏被清出来了
回复 支持 反对

使用道具 举报

1

主题

16

帖子

0

精华

新手上路

积分
44
金钱
44
注册时间
2015-6-29
在线时间
1 小时
发表于 2015-8-21 22:19:47 | 显示全部楼层




现在是这样的  我不知道我的写数据的函数有没有问题,我是8位的硬件IO口,必须要写两次才能写进去16位的数据啊。  搞了一天了没找到原因。各位大神帮忙看看啊



回复 支持 反对

使用道具 举报

120

主题

7877

帖子

13

精华

资深版主

Rank: 8Rank: 8

积分
12010
金钱
12010
注册时间
2013-9-10
在线时间
427 小时
 楼主| 发表于 2015-8-21 22:49:23 | 显示全部楼层
回复【24楼】放手一搏zrh:
---------------------------------
http://www.openedv.com/posts/list/52354.htm看看这个,自定义LCD屏幕的
现在,程序把烂铜烂铁变得智能化了,人呢,一旦离开了这烂铜烂铁就不知道干啥了
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-22 15:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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