OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 10852|回复: 6

XPT2046奇怪问题?笔中断一直处于低电平

[复制链接]

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
发表于 2012-7-22 23:34:39 | 显示全部楼层 |阅读模式
用的是STM32F4-Discovery,在XPT2046调试中遇到一个很奇怪问题,只要碰一下屏幕,笔中断就一直处于低电平(笔中断引脚接了一个LED,低电平时发光),再快速的连续点几下屏幕,偶尔也可以使LED熄灭(即笔中断恢复高电平)。正常情况下,笔中断只有在触摸屏幕的时候才会出现低电平。

XPT2046驱动用的是STM32的SPI接口,不是模拟SPI,在LED一直发光期间调试发现程序一直在一个地方死循环,


一直等着 while(SPI_I2S_GetFlagStatus( SPI2 , SPI_I2S_FLAG_RXNE) == RESET ); 这个地方。
换了一片XPT2046,把接口改向SPI 1 ,发现问题依然存在。后来原封不动的用了龙之元的代码,没有问题。于是将自己的代码一点点搬过去再测试看看,找到问题所在,结果很意外。

刚开始写的时候正常,程序大概像上图这样子,那里的读12次是因为想 去掉两极值然后求均值,这段代码都删了,现在就这样单纯的测试,很正常。但是每次松手后都会出现一个(0,2047)的值,如图


当时想滤去这个(0,2047)以及一些极端的坐标值,就加了个if语句进行筛选。如下图


原想,这样加了这个  if 语句  后,就能够保证读到12次 “合格” 的坐标值,没有像(0,2047)这样的了,不然去极值肯定就去了这个(0,2047)。但是这样做后,悲剧就发生了,就出现了之前所说的笔中断一直低电平问题(后来发现笔中断一直低电平是因为SPI的SCK一直再发送时钟)也就是在
 while(SPI_I2S_GetFlagStatus( SPI2 , SPI_I2S_FLAG_RXNE) == RESET );死循环问题。去掉这个if语句,就正常了。这个问题困扰了我好久,实在很意外。

求解?











for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2012-7-22 23:42:58 | 显示全部楼层
回复【楼主位】subo19920716:
---------------------------------
你加if之后,有可能一直无法读到12个有效数据啊.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

26

主题

194

帖子

5

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1175
金钱
1175
注册时间
2011-8-20
在线时间
21 小时
 楼主| 发表于 2012-7-22 23:59:04 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
好像是耶,呵呵。。当我按着屏幕不松的时候,肯定可以读到12个有效数据,但是松手的那一瞬间,可能刚刚好只读到了几个有效数据,所以一直会在while里循环,多按几次可以退出while纯属偶然碰中12次啊。居然犯了这样的错误,好傻,呵呵
for( int i=0; i<(1.0/0); i++ ) { for( int j=0; j<365; j++) money ++; age ++; if( age > 30 ) ChangeJob( Boss ); } 脸上的痘痘提醒我?我还年轻?口袋的米米告诉我?我仍需努力
回复 支持 反对

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2014-9-12 13:40:20 | 显示全部楼层
回复【3楼】subo19920716:
---------------------------------
现在可以吗?我也遇到相同的问题 实在不知道怎么办了?
回复 支持 反对

使用道具 举报

55

主题

243

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1608
金钱
1608
注册时间
2012-12-30
在线时间
241 小时
发表于 2014-9-12 13:48:25 | 显示全部楼层
回复【3楼】subo19920716:
---------------------------------
我遇到的while(SPI_I2S_GetFlagStatus( SPI2 , SPI_I2S_FLAG_RXNE) == RESET );死循环问题 不会出现 但是笔中断一直是低电平 设置时已经上啦
回复 支持 反对

使用道具 举报

头像被屏蔽

2

主题

164

帖子

1

精华

禁止访问

积分
1316
金钱
1316
注册时间
2012-5-13
在线时间
127 小时
发表于 2016-5-20 09:30:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

22

主题

108

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
430
金钱
430
注册时间
2016-5-23
在线时间
118 小时
发表于 2019-12-19 14:22:29 | 显示全部楼层
请问楼主STMPE811QTR和xpt2046s 一样的吗?还有龙之元的代码能麻烦你发上来一下吗
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 05:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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