简介:今日将某著名STM32开发板提供商的应用程序移植到自己的板子上,遇到触摸屏不准的情况,于是查看触摸屏相关控制代码。发现如下。
u16 TPReadX(void)
{
u16 x=0;
TP_CS();
SpiDelay(10);
//SPI_WriteByte(0xD0);
SPI_WriteByte(0xd0);
SpiDelay(20);
x=SPI_WriteByte(0x00);
x<<=8;
x+=SPI_WriteByte(0x00);
SpiDelay(20);
TP_DCS();
//x = 3671 - x;
x = x>>3;
return (x);
}
u16 TPReadY(void)
{
u16 y=0;
TP_CS();
SpiDelay(10);
//SPI_WriteByte(0x90);
SPI_WriteByte(0x90);
SpiDelay(20);
y=SPI_WriteByte(0x00);
y<<=8;
y+=SPI_WriteByte(0x00);
SpiDelay(20);
TP_DCS();
//y = 3601 - y;
y = y>>3;
return (y);
}
其中,关键位置在向SPI写数据的不同,如果你的触摸屏刚好反了,调换一下这两个就好了。
SPI_WriteByte(0x90);
SPI_WriteByte(0xd0);
另外,在GUI_TOUCH_X_TOUCH.C中,也要做相应的修改。
int GUI_TOUCH_X_MeasureY(void) {
unsigned char t=0,t1,count=0;
unsigned short int databuffer[10]={5,7,9,3,2,6,4,0,3,1};//数据组
unsigned short temp=0,Y=0;
while(count<10) //循环读数10次 //GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_0)==0&&
{
databuffer[count]= 3671 + 273-TPReadY(); //
count++;
}
if(count==10)//一定要读到10次数据,否则丢弃
{
do//将数据X升序排列
{
t1=0;
for(t=0;t{if(databuffer[t]>databuffer[t+1])//升序排列
{
temp=databuffer[t+1];
databuffer[t+1]=databuffer[t];
databuffer[t]=temp;
t1=1;
}
}
}while(t1);
Y=(databuffer[3]+databuffer[4]+databuffer[5])/3;
// if(X<=3730&&Y<=3730) //个人的屏根据初始参数修改.
// {
// if(X>=330)X-=330;
// else X=0;
// if(Y>=420)Y-=420;
// else Y=0;
// drawbigpoint(240-X/14,320-Y/10);
// }
}
return(Y);
}
关键字:LCD触摸屏 移植 STM32
引用地址:
将不同型号LCD触摸屏移植的相关问题
推荐阅读最新更新时间:2024-11-11 19:52
STM32引脚模式GPIOMode_TypeDef
① 浮空输入_IN_FLOATING //串口输入 ② 带上拉输入_IPU ③ 带下拉输入_IPD ④ 模拟输入_AIN ⑤ 开漏输出_OUT_OD ⑥ 推挽输出_OUT_PP //置位 ⑦ 复用功能的推挽输出_AF_PP //串口输出 ⑧ 复用功能的开漏输出_AF_OD 推挽输出与开漏输出的区别 推挽输出:可以输出高,低电平,连接数字器件; 开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内). 推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的时候另一个截止
[单片机]
STM32 串口USART调试Error
关于stm32串口接收大量数据导致死机,即使加了看门狗也死机的情况,论坛上已有热心网友分享乐宝贵经验,至于效果,应该是有的。未能免俗,也来分享,狗尾续貂了。 原文网站: http://bbs.21ic.com/icview-160999-1-1.html 感谢这位网友分析问题。 首先,造成死机的原因多种多样,本人做的实验室用串口接收飞控数据,波特率57600。大量数据导致串口中断频繁,理想情况下,设置好中断优先级应该是可以有条不紊的处理数据。我遇到的情况是 1、 设置看门狗,只用定时器喂狗,main函数没有做任何处理,串口开了一段时间,main函数挂了,可是喂狗一直在跑,程序不复位,那也就说某些外设在不断的跑,或者跑飞,main函
[单片机]
UBOOT-1.1.6在S3C2410上的移植(基于GEC2410)
之前做过u-boot-1.1.6在AT91RM9200的移植,虽然2410和9200这两款ARM9芯片都是ARM920T核的,但还是有不少区别的,特别是启动方式(当然前者是工业级后者是民用级不必说)。at91rm9200内部本身有128k的片内rom,其固化了一个bootloader和uploader, 用来支持程序的下载和引导,而且其内部固化的程序提供了很多内部服务接口(Internel Service)供我们来使用,例如Xmodem;而S3C2410启动是把nandflash的前4K代码自动搬到Steppintstone中去运行,而Steppingstone使用的物理地是从0号位置开始的。(当然如果是Nor Flash启动,两
[单片机]
STM32_Touch 总结
移植了奋斗的触摸屏程序,有一些地方还是没有搞懂,这个先把已经做好的记录下来。 首先是触摸屏校准值,这个在后面有专门的校准函数,但是上电采用已经有的校准值进行操作。 C语言: Codee#18707 /*================================================================== * Function : Touch_CalibrationValueAssignment * Description : 触摸屏校准系数 赋初值 * Input Para : None * Output Para : void * Return Value : None ====
[单片机]
STM32 复用时钟开启情况
简介:本文介绍了STM32的复用时钟在什么时候需要开启,什么时候可以不开启。 首先为什么要开启时钟? 答:因为要对寄存器进行读写!而在STM32中对寄存器的读写都是要打开寄存器对应的时钟才可以的【就像人一样,有了跳动的脉搏手臂才能有能量才能进行各种动作】。 然后就什么时候AFIO时钟开启(所有时钟都是这样)就清楚了:当需要对“AFIO时钟管理的寄存器”进行读写时AFIO时钟打开!当然不对“AFIO时钟管理的寄存器”读写时也可以打开AFIO时钟,此时只是白白增加能耗、写无用代码(白白浪费程序存储器空间)而已! 接下来:跟AFIO相关的寄存器有哪些呢? 答:根据《STM32中文参考手册_V10》有:①事件控制寄存器
[单片机]
STM32学习笔记-L298N驱动模块-电机
新手上路,十几天的学习感觉弯路走了不少,所以打算把学习的知识记录下来,和大家分享,不要嫌弃我,我从非常新手的角度来写。 1、STM32F103RCT6 我也是第一次学习单片机,选择了正点原子家的迷你版,学习到后面才发现什么板子都差不多,只要学会看手册就好了。推荐论坛:CSDN、正点原子官网、51黑论坛等。可以跟着正点原子提供的手把手视频教程把基本的实验做出来再去学习更深入的原理,就能得到事半功倍的效果。不要因为自己不会而畏怯,一旦遇到不懂的知识就马上查资料,还是不懂就去问,好了,感想有点多了。 2、L298N电机驱动模块 以后不要只认为淘宝是买东西的,上面可以找到的资料也很多。解释一下: 马达A输出(OUT1和OUT
[单片机]
STM32学习笔记 之绪论
学习STM32也有些日子了。作为初学者,从最初的一无所知,到现在略知皮毛之皮毛,感觉着实不容易。 下面把自己的体会以及自认为初学者不易掌握的要点和大家分享一下,有错误的地方,欢迎大家指正。 一、关于学习方法 初学STM32给我的一个感觉就是,概念繁多而且很多都可以继续深究下去,教程对此又不可能都很详细的论述,但于我来说如鱼鲠喉实在不爽。 因为我喜欢刨根问底,网络资料又实在繁杂,如此又耗费精力,又打击学习积极性。 终于有一天,我转变了心态,如果STM32犹如枝繁叶茂的大树(整个嵌入式体系亦如此),我要做的不是连每一个叶子都明了,而是暂时只要知晓其主干及一些必要的干支即可。其他的枝叶等有时间再去深究,
[单片机]
STM32学习笔记一一窗口看门狗
1.窗口看门狗( WWDG):通常被用来监测由外部干扰或不可预见的逻辑条件造成的应用程序背离正常的运行序列而产生的软件故障。 2.窗口看门狗工作示意图: T 就是 WWDG_CR 的低七位, W 即是 WWDG- CFR 的低七位。T 就是窗口看门狗的计数器,而 W 则是窗口看门狗的上窗口,下窗口值是固定的( 0X40)。当窗口看门狗的计数器在上窗口值之外被刷新,或者低于下窗口值都会产生复位。上窗口值( W ) 是由用户自己设定的,根据实际要求来设计窗口值,但是一定要确保窗口值大于 0X40,否则窗口就不存在了。 3.相关寄存器 a.控制寄存器( WWDG_CR):各位描述如下图 WWDG_C
[单片机]