你好 我用的XPT2046 能帮我查一下程序吗?我读出来的 不是全高就是全低 BUSY信号也是常高
void XPT2046_Configuration(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
//GPIOA Periph clock enable
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
//XPT2046: BUSY: PB5 MOSI: PB6 IRQ: PB8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //复用推挽输出GPIO_Mode_IPD;//
GPIO_Init(GPIOB,&GPIO_InitStructure);
//XPT2046: BUSY: PB5 MOSI: PB6 IRQ: PB8
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOB,&GPIO_InitStructure);
//XPT2046: clk: PD3 CS: PD4 MOSO: PD5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //GPIO_Mode_AF_PP; //复用推挽输出
GPIO_Init(GPIOD,&GPIO_InitStructure);
XPT2046_CS_HIGH() ;//XPT2046_CS_LOW();
}
u16 SPI_WriteByte(u8 in_data)
{
u8 i=0,x=0;
u16 out_Data = 0;
XPT2046_CS_LOW();
XPT2046_CLK_LOW();
x=in_data;
for(i=0;i<8;i++) // 发送1字节读取命令
{
if(in_data&0x80)
XPT2046_MOSO_HIGH();
else XPT2046_MOSO_LOW();
in_data<<=1;
XPT2046_CLK_LOW();
SpiDelay(200);
XPT2046_CLK_HIGH();
SpiDelay(200);
}
XPT2046_CLK_LOW();
SpiDelay(200);
XPT2046_CLK_HIGH();
SpiDelay(200);
for(i=0;i<16;i++) // 接收2字节结果
{
out_Data<<=1;
XPT2046_CLK_LOW();
SpiDelay(200);
XPT2046_CLK_HIGH();
if( XPT2046_GET_MOSI())out_Data=out_Data|0x01;
SpiDelay(200);
}
out_Data>>=4; // 结果右移4位,获取高12位有效数据
XPT2046_CS_HIGH();
return out_Data;
}
|