stm32驱动3.2寸触摸屏(包括IO模拟,SPI硬件接口)

该博客详细介绍了如何使用STM32驱动3.2寸触摸屏,提供了两种驱动方式:SPI硬件接口和IO口模拟。通过初始化配置GPIO、EXTI和SPI,并实现读取触摸屏坐标的功能。此外,还包含了校准和中断处理的代码示例。
摘要由CSDN通过智能技术生成
#ifndef TOUCH_H
#define TOUCH_H
#define SPI   0           //通过宏定义来选择SPI驱动,还是IO口模拟
#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_exti.h"
#include "stm32f10x_spi.h"
#include "math.h"
#include "TFT.h"
#define TCS_HIGH     GPIO_SetBits(GPIOB,GPIO_Pin_12)   // NSS Soft Mode 
#define TCS_LOW      GPIO_ResetBits(GPIOB,GPIO_Pin_12) // NSS Soft Mode
#define PEN          GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0) //INT state
#define TOUT         GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)
#define TDIN_HIGH    GPIO_SetBits(GPIOB,GPIO_Pin_15)
#define TDIN_LOW     GPIO_ResetBits(GPIOB,GPIO_Pin_15)
#define TCLK_HIGH    GPIO_SetBits(GPIOB,GPIO_Pin_13)
#define TCLK_LOW     GPIO_ResetBits(GPIOB,GPIO_Pin_13)
#define TXMAX        4000         //根据设定的校准值,超出范围 数据无效
#define TYMAX        4000
#define TXMIN        100
#define TYMIN        100
#define SCREEN_W      240
#define SCREEN_H      320
#define ERROR_RANGE   100
#define KEY_UP        0x01 
#define KEY_DOWN      0x00
#define CHX      0xd0
#define CHY      0x90
#define EXTI_ENABLE		     EXTI->IMR|=0X0001          //开启线0中断
#define EXTI_DISABLE       EXTI->IMR&=~0X0001        //关闭线0中断         //ads7843芯片在第一个时钟的上升沿输入,第一个时钟的
typedef struct sldkf                         //下降沿输出,所以SPI要设置为1时钟,上升沿。在读取的时候,
{                                            //也是在1时钟,上升沿读取。但ads是在下降沿输出,所以,第一个值,是废值
	u16 x0,y0;     //原始坐标,即AD值         //所以左移3位
	u16 x,y;       //最终坐标,像素点值
	u8  flag;      //当前状态,其实就是判断中断否发生的标志
	float xfac,yfac,xoff,yoff; //偏移参数
}Hand;
Hand pence;
u16 TX,TY;
int ABS(int x)
{
	return x>0?x:-x;
}
void Touch_SPI_inti()  //SPI驱动ADS所用到的初始化
{
	SPI_InitTypeDef spi;
	GPIO_InitTypeDef gpio;
	NVIC_InitTypeDef nvic;
	EXTI_InitTypeDef exit;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2,ENABLE);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	gpio.GPIO_Pin=GPIO_Pin_12;  //nss 推挽输出
	gpio.GPIO_Mode=GPIO_Mode_Out_PP;
	gpio.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_Init(GPIOB,&gpio);
	
	gpio.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15; // sck,mosi 复用推挽输出
	gpio.GPIO_Mode=GPIO_Mode_AF_PP;
	GPIO_Init(GPIOB,&gpio);
	
	gpio.GPIO_Pin=GPIO_Pin_14;             //miso 浮空输入
	gpio.GPIO_Mode=GPIO_Mode_IPU;
	//	gpio.GPIO_Mode=GPIO_Mode_IN_FLOATING;//miso 配置为复用输出,或者浮空输入效果没差别,不解
	GPIO_Init(GPIOB,&gpio);	
	
	SPI_Cmd(SPI2,DISABLE);
	spi.SPI_Direction=SPI_Direction_2Lines_FullDuplex;  //全双工
	
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值