打印
[STM32U5]

【NUCLEO-U5A5ZJ-Q测评】6.XPT2046电阻触摸驱动

[复制链接]
1599|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Tristan_C|  楼主 | 2023-11-29 23:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Tristan_C 于 2023-11-29 23:20 编辑

#申请原创#
XPT2046电阻触摸驱动
前面调试好了ILI液晶的驱动这回来尝试一下触摸芯片的。XPT2046 是一款 4 线制电阻式触摸屏控制器,内含 12 位分辨率 125KHz 转换速率逐步逼近型 A/D 转换器。XPT2046 支持从 1.5V 到 5.25V 的低电压 I/O 接口。XPT2046 能通过执行两次 A/D 转换查出被按的屏幕位置, 除此之外,还可以测量加在触摸屏上的压力。内部自带 2.5V 参考电压,可以作为辅助输入、温度测量和电池监测之用,电池监测的电压范围可以从 0V 到 6V。XPT2046 片内集成有一个温度传感器。 在 2.7V 的典型工作状态下,关闭参考电压,功耗可小于 0.75mW。XPT2046 采用微小的封装形式:TSSOP-16,QFN-16 和 VFBGA-48。工作温度范围为-40℃~+85℃。与 ADS7846、TSC2046、AK4182A 完全兼容,其典型应用电路如下

引脚定义为:

可见我们需要一路SPI以及一路中断来驱动它,在选择上,就用开发板上的SPI_B,其实也就是SI3.

打开之前的ILI9341工程的cubemx工程,增加该SPI配置



并注意时钟的选择

这里要注意一下systick的中断与外部中断之间优先级的配置,以避免后面有延时的地方。

如下为触摸按下检测的中断引脚

生成工程,并在工程中添加XPT2046的驱动代码文件

中断处理函数如下,主要是置位标志位,即触摸按下标志,即可进行触摸坐标计算或者校准动作了。

在主函数中,进行初始化,并进行校准(因为没做校准值存储,所以每次上电都做了一次校准了),并在主循环中,检测按下之后在屏幕的左上角显示按下的坐标位置。

编译下载运行

因为条线比较多,需要一只手把住液晶板子,所以没法拍视频,只能拍些照片展示一下了
如下为校准过程




校准成功

之后就可以把按下的坐标显示在左上角了。




参考附件代码

stm32_ili9341_xpt2046.rar

8.01 MB

stm32_ili9341_xpt2046

使用特权

评论回复
沙发
jf101| | 2023-11-30 09:28 | 只看该作者
一般屏幕上都有相关的触摸IC,确实很方便开发

使用特权

评论回复
板凳
Tristan_C|  楼主 | 2023-11-30 10:20 | 只看该作者
jf101 发表于 2023-11-30 09:28
一般屏幕上都有相关的触摸IC,确实很方便开发

献丑了,因为第一次调试触摸这部分,感觉校准效果做得不是很好,代码写得也不够好,见笑了

使用特权

评论回复
地板
yangjiaxu| | 2023-11-30 11:42 | 只看该作者
XPT2046电阻触摸是不是就用的I2C啊?这个好像还比较简单,但就是个电阻屏比较难弄

使用特权

评论回复
5
Tristan_C|  楼主 | 2023-11-30 12:24 | 只看该作者
yangjiaxu 发表于 2023-11-30 11:42
XPT2046电阻触摸是不是就用的I2C啊?这个好像还比较简单,但就是个电阻屏比较难弄 ...

很多用IO模拟的SPI,一些时序上可能更灵活点,我用了硬件的。这个屏比较老了,确实没有现在那些新方案的屏丝滑,电阻式还得做些校准才好用

使用特权

评论回复
6
Undshing| | 2023-11-30 16:30 | 只看该作者
硬件实现不应该速度更快嘛

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

114

帖子

1

粉丝