找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2088|回复: 0
打印 上一主题 下一主题
收起左侧

STM32F4 XPT2046采集问题

[复制链接]
跳转到指定楼层
楼主
ID:340255 发表于 2018-10-30 15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F4 XPT2046触摸屏 读回来的值一直是0


主函数里面通过软件模拟SPI进行了采样,将值的显示到LCD屏上
按压屏幕就采样赋值给K
然后循环显示。
但是采样值移植为0。

int main()
{
u16 k=5;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2
LCD_Init();//内部有系统时钟初始化
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时钟

//GPIOB1,2初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;//PB1/PB2 设置为上拉输入
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设置为推挽输出
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设置为推挽输出
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;//PF11设置推挽输出
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;//已经校准
// else //未校准?
// {
// LCD_Clear(WHITE);//清屏
// TP_Adjust(); //屏幕校准
// TP_Save_Adjdata();
// }
// TP_Get_Adjdata();
// return 1;

}
就进行了接口配置

//SPI读数据
//从触摸屏IC读取adc值
//CMD:指令
//返回值:读到的数据
u16 TP_Read_AD(u8 CMD)
{
u8 count=0;
u16 Num=0;
TCLK=0; //先拉低时钟
TDIN=0; //拉低数据线
TCS=0; //选中触摸屏IC
delay_us(1);
TP_Write_Byte(CMD);//发送命令字
delay_us(6);//ADS7846的转换时间最长为6us
TCLK=0;
delay_us(1);
TCLK=1; //给1个时钟,清除BUSY
delay_us(1);
TCLK=0;
for(count=0;count<16;count++)//读出16位数据,只有高12位有效
{
Num<<=1;
TCLK=0; //下降沿有效
delay_us(1);
TCLK=1;
if(DOUT)Num++;
}
Num>>=4; //只有高12位有效.
TCS=1; //释放片选
return(Num);
}



//SPI写数据
//向触摸屏IC写入1byte数据
//num:要写入的数据
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; //上升沿有效
}
}

看看也留个言,知识与我们同在。。。
求高手指教,有点崩溃。。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表