前言
在上一篇的文章里面,我们已经实现了基本屏幕显示,可以使用TOUCHGFX来显示基本的色块了,在本篇我们将在之前的基础上,完善我们的功能:
1.增加触摸的功能
2.将资源保存在外部的存储介质QSPI FLASH W25Q128
3.制作模板
添加触摸功能
1.驱动触摸
触摸的驱动这里就不做过多的介绍了,每个人使用的触摸IC各不相同,但是不论使用的是那种IC,最终要实现的功能是一样的。
![](https://i-blog.csdnimg.cn/blog_migrate/358a7a52cfa13f5c6a00590affaae63c.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ea577f5fb05bd825d8159e2e02f0e604.png)
这样配置就好了,是否开中断,是否需要上拉电阻,视自己情况而定。
你需要将获取触摸位置封装成这样的一个函数:
uint8_t bsp_ns2009_getXY(uint16_t *x,uint16_t *y)
{
unsigned int z=0;
z = bsp_ns2009_getPress();
if ((z > 70) && (z < 2000))
{
*x = ns2009_read(NS2009_LOW_POWER_READ_X)* SCREEN_X_PIXEL / 4096; //4096 = 2 ^ 12;
*y = ns2009_read(NS2009_LOW_POWER_READ_Y)* SCREEN_Y_PIXEL / 4096;
return 0;
}
else
{
return 1;
}
}
使用指针作为参数,同时需要返回是否有被按下。
2.TOUCHGFX添加触摸的功能
添加获取触摸位置的方法
![](https://i-blog.csdnimg.cn/blog_migrate/e10a07654846cefb896811cfdddbbd77.png)
同时不要忘了添加触摸的初始化,
![](https://i-blog.csdnimg.cn/blog_migrate/ad0712214409cd73b43b9d637b69e0fa.png)
3.测试触摸功能
双击打开这个文件,编辑我们的测试UI,
这是我们之前的UI界面,我们稍作改动,
在白底的BOX上绘制了一个绿色的BOX,同时设置绿色的BOX为可以拖动的,
接下来生成代码测试下吧,
到这步的代码已经放入了代码仓库,方便查阅代码发行版https://gitee.com/lei_kkaaa/touch-gfx-guidelines/releases/tag/v2.0
将资源保存在外部存储介质
1.外部存储介质的选择简介
理论上将资源保存任何的介质都是可以的,你可以保存在TF卡内,你也可以保存在外部的FLASH内,但是有一点你需要注意,使用非储存映射的介质的话,在使用上会有所限制。
本篇还是使用QSPI FLASH来存储,这样可以开启地址映射。配置简单,开始映射模式的话,后面就不需要去写接口什么的了,使用非常方便。
2.使用 QUAD SPI FLASH
驱动编写
网上的资源非常得多,自行百度。
编写链接文件
链接文件就是在编译的时候将各个数据分配到哪个地址的过程,分配到哪里就是由这个文件决定的。
点击编辑,然后复制里面的内容,复制到新建的自己的文件,
自己新建的文件里面新添加一个段,然后保存,
选择你新建的文件,
验证是否成功
目录下的这个文件,添加一个按键即可,因为按键的图片默认是链接到外部的FALSH的,
这里删除了之前的绿色BOX,仅仅保留了白色的背景,添加了一个小的按键,生成代码,再到keil编译。因为按键弹起和按键被按下的两个状态是显示的两张图片,图片默认是存储在外部的,
双击工程名字打开map文件,如果没有的话。
可以看到图片已经被链接到0x90000000的地址,也就是外部FLASH的地址了,下一步就是将数据下载到外部的FLASH了。
将资源下载到外部
我们先新建一个target用来下载外部资源,在此之前,你需要已经编写好了外部的下载算法,
切换到新建的target, 去掉所有的文件,不是删除也不是remove,
然后添加算法文件,先去除原来的,然后添加,
如果下载的时候出现这个错误的话,需要适当改大RAM的小,
还有就是不要验证,不然也会有错误,这个一般是验证代码写的有问题
这样修改以后就下载正常了,
发行版代码https://gitee.com/lei_kkaaa/touch-gfx-guidelines/releases/tag/v3.1
你可能遇到的问题:
虽然可以正常下载,但是显示的内容却有问题,
第一步我们先读出FALSH部分数据,与应该写入的数据进行比对。使用keil的调试功能可以看到那一部分的内容是没有写入的。因此是下载算法有问题导致的,查看你的下载算法有没有选对。
注意:
同时添加两个下载算法是有问题的,因此我们使用两个下载target来下载,
注意:
如果你使用的不是内存映射的存储介质,倘若你设置了按键是可以拖动的,但是你将无法拖动它,只有内存映射的可以。