linux平台xpt2046驱动,XPT2046触摸屏实验过程详解与STM32代码解析

1.XPT2046的初始化

XPT2046说起来其实就是一个AD转换器,所以它适合不需要什么初始化设置的,而具体的初始化其实也就是单片机IO的初始化和SPI的初始化。

这次STM32是使用SPI1来进行操作,SPI的设置其实在前几节课已经讲过了,这里就不重复讲了,初始化的具体代码如下:

/**********************************************************************

*FuncTIonName:TOUCH_Init

*DescripTIon:初始化触摸屏

*Input:None

*Output:None

*Return:None

**********************************************************************/

voidTOUCH_Init(void)

{

GPIO_InitTypeDefGPIO_InitStructure;

/*SPI的IO口和SPI外设打开时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);

/*TOUCH-CS的IO口设置*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);

/*TOUCH-PEN的IO口设置*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;

GPIO_Init(GPIOD,&GPIO_InitStructure);SPI1_Config();

/*要使用FLASH来存储校正参数,所以注意之前要初始化*/

/*检测是否有校正参数*/

FLASH_ReadData(&TouchAdj.posState,TOUCH_ADJ_ADDR,sizeof(TouchAdj));

if(TouchAdj.posState!=TOUCH_ADJ_OK)

{

TOUCH_Adjust();//校正

}

}

在这个函数中,调用了SPI1的初始化函数,和触摸屏的校正程序,下面是SPI1的

初始化程序,校正原理我们在后面在讲述。

/**********************************************************************

*FuncTIonName:SPI1_Config

*DescripTIon:初始化SPI2

*Input:None

*Output:None

*Return:None

*********************************************************************/

voidSPI1_Config(void)

{

GPIO_InitTypeDefGPIO_InitStructure;SPI_InitTypeDefSPI_InitStructure;

/*SPI的IO口和SPI外设打开时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1,ENABLE);

/*SPI的IO口设置*/

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);//PA5.6.7上拉

/********************************************************************/

/*******************设置SPI的参数***********************************/

/*********************************************************************/SPI_InitStructure.SPI_Direction=SPI_Direction_2Lines_FullDuplex;//选择全双工SPI模式

SPI_InitStructure.SPI_Mode=SPI_Mode_Master;//主机模式SPI_InitStructure.SPI_DataSize=SPI_DataSize_8b;//8位SPISPI_InitStructure.SPI_CPOL=SPI_CPOL_High;//时钟悬空高电平SPI_InitStructure.SPI_CPHA=SPI_CPHA_2Edge;//在第二个时钟采集数据SPI_InitStructure.SPI_NSS=SPI_NSS_Soft;//Nss使用软件控制

/*选择波特率预分频为256*/

SPI_InitStructure.SPI_BaudRatePrescaler=SPI_BaudRatePrescaler_256;SPI_InitStructure.SPI_FirstBit=SPI_FirstBit_MSB;//从最高位开始传输

SPI_InitStructure.SPI_CRCPolynomial=7;

SPI_Cmd(SPI1,ENABLE);SPI_Init(SPI1,&SPI_InitStructure);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值