论坛大神
  
- 积分
- 1176
- 金钱
- 1176
- 注册时间
- 2011-8-20
- 在线时间
- 21 小时
|
用的是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语句,就正常了。这个问题困扰了我好久,实在很意外。
求解?
|
|