找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2447|回復(fù): 0
收起左側(cè)

STM32F4 XPT2046采集問題

[復(fù)制鏈接]
ID:340255 發(fā)表于 2018-10-30 15:16 | 顯示全部樓層 |閱讀模式
STM32F4 XPT2046觸摸屏 讀回來的值一直是0


主函數(shù)里面通過軟件模擬SPI進(jìn)行了采樣,將值的顯示到LCD屏上
按壓屏幕就采樣賦值給K
然后循環(huán)顯示。
但是采樣值移植為0。

int main()
{
u16 k=5;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
LCD_Init();//內(nèi)部有系統(tǒng)時(shí)鐘初始化
led_Init();//初始化LED
key_Init();//初始化LCD
My_RTC_Init(); //初始化RTC
uart_init(115200); //初始化串口波特率為115200
tp_dev.init(); //觸摸屏初始化

while(1)
{
if(PEN==0)
{
k=TP_Read_AD(0XD0);
}
if(key_Scan(0)==1)k=5;
LCD_ShowNum(100,100,k,4,24);


}
}



u8 TP_Init(void)
{

GPIO_InitTypeDef GPIO_InitStructure;

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOF, ENABLE);//使能GPIOB,C,F時(shí)鐘

//GPIOB1,2初始化設(shè)置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;//PB1/PB2 設(shè)置為上拉輸入
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//輸入模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//PB0設(shè)置為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽輸出
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//PC13設(shè)置為推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PF11設(shè)置推挽輸出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//輸出模式
GPIO_Init(GPIOF, &GPIO_InitStructure);//初始化

// TP_Read_XY(&tp_dev.x[0],&tp_dev.y[0]);//第一次讀取初始化
// if(TP_Get_Adjdata())return 0;//已經(jīng)校準(zhǔn)
// else //未校準(zhǔn)?
// {
// LCD_Clear(WHITE);//清屏
// TP_Adjust(); //屏幕校準(zhǔn)
// TP_Save_Adjdata();
// }
// TP_Get_Adjdata();
// return 1;

}
就進(jìn)行了接口配置

//SPI讀數(shù)據(jù)
//從觸摸屏IC讀取adc值
//CMD:指令
//返回值:讀到的數(shù)據(jù)
u16 TP_Read_AD(u8 CMD)
{
u8 count=0;
u16 Num=0;
TCLK=0; //先拉低時(shí)鐘
TDIN=0; //拉低數(shù)據(jù)線
TCS=0; //選中觸摸屏IC
delay_us(1);
TP_Write_Byte(CMD);//發(fā)送命令字
delay_us(6);//ADS7846的轉(zhuǎn)換時(shí)間最長(zhǎng)為6us
TCLK=0;
delay_us(1);
TCLK=1; //給1個(gè)時(shí)鐘,清除BUSY
delay_us(1);
TCLK=0;
for(count=0;count<16;count++)//讀出16位數(shù)據(jù),只有高12位有效
{
Num<<=1;
TCLK=0; //下降沿有效
delay_us(1);
TCLK=1;
if(DOUT)Num++;
}
Num>>=4; //只有高12位有效.
TCS=1; //釋放片選
return(Num);
}



//SPI寫數(shù)據(jù)
//向觸摸屏IC寫入1byte數(shù)據(jù)
//num:要寫入的數(shù)據(jù)
void TP_Write_Byte(u8 num)
{
u8 count=0;
for(count=0;count<8;count++)
{
if(num&0x80)TDIN=1;
else TDIN=0;
num<<=1;
TCLK=0;
delay_us(1);
TCLK=1; //上升沿有效
}
}

看看也留個(gè)言,知識(shí)與我們同在。。。
求高手指教,有點(diǎn)崩潰。。。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表