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);
}
評論
查看更多