笔记:XPT2046调试总结
时间:2020-07-21
本文章向大家介绍笔记:XPT2046调试总结,主要包括笔记:XPT2046调试总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、芯片
1.1 芯片简介
四线电阻屏驱动芯片
差分输入模式,12位模式,转换速率125KHz,SPI时钟频率2MHz
1.2 命令字
采用SPI接口,一次完整转换需要24个串行时钟周期
前8个时钟周期输入控制字节,3个多周期后进入转换状态,12个周期完成数模转换
1.3 笔中断输出
当PD0=0时,笔中断输出触发;当PD0=1,笔中断输出禁止
笔中断输出引脚上拉电阻越高,对触摸屏反应越慢
在X、Y坐标测量中,笔中断被禁止,输出为低电平
如果最后写进芯片的控制字包含PD0=1,笔中断输出功能禁止,不能监测触摸屏上触摸动作。要想重新使能笔中断输出功能,需要把带有PD0=0的控制字写入芯片
官方文档建议:无论在任何时候,处理器在发控制字给XPT2046之前,都要屏蔽笔中断,以避免错误的中断触发
二、外围电路
三、芯片驱动
STM32-HAL库,SPI配置
/* Set the SPI parameters */
hspi2.Instance = SPI1;
hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
hspi2.Init.Direction = SPI_DIRECTION_2LINES;
hspi2.Init.CLKPhase = SPI_PHASE_1EDGE;
hspi2.Init.CLKPolarity = SPI_POLARITY_LOW;
hspi2.Init.DataSize = SPI_DATASIZE_8BIT;
hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspi2.Init.TIMode = SPI_TIMODE_DISABLE;
hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspi2.Init.CRCPolynomial = 7;
hspi2.Init.CRCLength = SPI_CRC_LENGTH_8BIT;
hspi2.Init.NSS = SPI_NSS_SOFT;
hspi2.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
hspi2.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE; /* Recommanded setting to avoid glitches */
hspi2.Init.Mode = SPI_MODE_MASTER;
/* 复位配置 */
if (HAL_SPI_DeInit(&hspi2) != HAL_OK)
{
Error_Handler(__FILE__, __LINE__);
}
/* 初始化配置 */
if (HAL_SPI_Init(&hspi2) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
SPI读写函数
void bsp_xpt2046_spiWrite(uint8_t data)
{
HAL_SPI_Transmit(&hspi2, &data, 1, 20000); //不配置硬件片选(NSS)功能,手动片选
}
uint8_t bsp_xpt2046_spiRead(void)
{
uint8_t rxData = 0;
uint8_t txData = 0;
//HAL_SPI_Receive(&hspi2, &data, 1, 20000);
/* 注意读取转换结果时,填充的命令字(PD0=0),直接填充0x00即可 */
HAL_SPI_TransmitReceive(&hspi2, &txData,&rxData, 1, 20000);
return rxData;
}
/*
*********************************************************************************************************
* 函 数 名: xpt2046_ReadAdc
* 功能说明: 选择一个模拟通道,启动ADC,并返回ADC采样结果
* 形 参: _ucCMD,通道采样命令
* 返 回 值: 12位ADC值
*********************************************************************************************************
*/
uint16_t bsp_xpt2046_ReadAdc(uint8_t _ucCMD)
{
uint16_t usAdc;
xpt2046_SetCS_L; /* 使能TS2046的片选 */
/*
TSC2046 控制字(8Bit)
Bit7 = S 起始位,必须是1
Bit6:4 = A2-A0 模拟输入通道选择A2-A0; 共有6个通道。
Bit3 = MODE ADC位数选择,0 表示12Bit;1表示8Bit
Bit2 = SER/DFR 模拟输入形式, 1表示单端输入;0表示差分输入
Bit1:0 = PD1-PD0 掉电模式选择位
*/
bsp_xpt2046_spiWrite(_ucCMD); /* 选择转换通道,选择转换坐标轴 */
//bsp_DelayUS(6);
/* 读ADC结果, 12位ADC值的高位先传,前12bit有效,最后4bit填0 */
usAdc = bsp_xpt2046_spiRead(); /* 发送的0x00可以为任意值,无意义 */
usAdc <<= 8;
usAdc += bsp_xpt2046_spiRead(); /* 获得12位的ADC采样值 */
usAdc >>= 3; /* 右移3位,保留12位有效数字. */
xpt2046_SetCS_H; /* 禁能片选 */
return (usAdc);
}
四、问题总结
4.1 SPI配置
XPT2046-SPI接口频率2MHz左右,配置时注意MCU-SPI接口频率不要过高
4.2 触摸笔中断
注意读XPT2046转换结果时,写入的字节为0x00,
如果填充为0xff,则会导致下一次触摸笔中断失效
原文地址:https://www.cnblogs.com/bog-box/p/13353069.html
- Docker系列教程07-Dockerfile指令详解
- Docker系列教程06-实战:修改Nginx首页
- prompt() 方法,弹框带输入框
- Docker系列教程05-容器常用命令
- 数据分析利器-NumPy
- 【LEETCODE】模拟面试-134-Gas Station
- Docker系列教程17-默认bridge网络中配置DNS
- Docker系列教程16-network命令
- 【LEETCODE】模拟面试-206. Reverse Linked List
- Eslint检测出的问题如何自动修复
- 【LEETCODE】模拟面试-215. Kth Largest Element in an Array
- Docker系列教程15-Docker容器网络
- 数据挖掘
- Docker系列教程14-Docker数据持久化
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法