开发者社区> 技术小美> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

【STM32 .Net MF开发板学习-10】SPI测试之触摸屏坐标获取

简介:
+关注继续查看

STM32F103xx Cortex-M3系列的芯片含三路SPI通道,红牛开发板用了两路,SPI1连接AT45DB161B型号的SPI FlashSPI2连接ADS7843触摸屏信号处理芯片,SPI3最好不要用,因为和JTAG的管脚有冲突,调试时会有问题。EM-STM3210E开发板由于不含触摸屏,所以只用了一路来连接SPI Flash。本篇博文介绍触摸屏坐标获取,所以只有拥有红牛开发板的用户可以测试。

先简单介绍一下SPI相关的知识,SPI是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROMFLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间,是一种高速的,全双工,同步的通信总线。

SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(用于单向传输时,也就是半双工方式),相关管脚含义如下:

1SDO  主设备数据输出,从设备数据输入   

2SDI  主设备数据输入,从设备数据输出

3SCLK  时钟信号,由主设备产生  

 (4CS  从设备使能信号,由主设备控制

(详情请参见百度百科SPI词条:http://baike.baidu.com/view/245026.htm

再说一下ADS7843芯片的相关知识,红牛开发板关于这个芯片的原理图如下:

比较可惜的是,从原理图上看其中断管脚(INT)没有引出,所以只能通过轮询获取X,Y坐标了。

ADS7843芯片的SPI通信时序图如下:

 

 

ADS7843参考资料:http://wenku.baidu.com/view/bc414573f242336c1eb95e6c.html

ADS7843相关资料可知,读X坐标的控制字为0x90,读Y坐标的控制字为0xD0。从通信时序图可知,回传的数据为12位,从返回的第2个字节开始算起,其格式如下:

2个字节:12位的高8

3个字节:112位的低4位,并且在该字节的高位,低4位补零。

换算公式:X(或Y = (byte[2]<<8 | byte[1])>>4

 

需要说明的是,SPI驱动需要配置的参数的很多,有些参数在驱动中采用了默认值,其内容如下:

两线双向 / 主模式 / 第一个时钟沿触发 /  软件从设备管理启用 /先发送高字节。

其它的参数是可配置的,配置接口类如下:

      public class Configuration

      {

            public readonly Cpu.Pin BusyPin;

            public readonly bool BusyPin_ActiveState;

            public readonly bool ChipSelect_ActiveState;

            public readonly uint ChipSelect_HoldTime;

            public readonly Cpu.Pin ChipSelect_Port;

            public readonly uint ChipSelect_SetupTime;

            public readonly bool Clock_Edge;

            public readonly bool Clock_IdleState;

            public readonly uint Clock_RateKHz;

            public readonly SPI.SPI_module SPI_mod;

            ……

    }

需要说明的是,BusyPin管脚一般不用配置,另外ChipSelect_Port片选管脚一定不要配置,SPI驱动中已经进行了配置,我就是因为配置了这个,害的我调试了近两天的时间才发现这个问题。

   SPI创建和声明的代码如下:

    SPI.Configuration spiConfig = new SPI.Configuration((Cpu.Pin)(-1), false, 1, 1, falsetrue, 2250, SPI.SPI_module.SPI2);

    SPI spi = new SPI(spiConfig);

    获取触摸屏的核心代码如下:

    static void GetPoint(SPI spi, out int ux, out int uy)

    {

            int i, d1 = 0xFFFF, d2 = 0xFFFF;

            byte[] writeBufferX = new byte[3] { 0x90, 0, 0 };

            byte[] writeBufferY = new byte[3] { 0xD0, 0, 0};

            byte[] readBuffer = new byte[2] { 0 ,0};

            //--   

            for (i = 0; i <4; i++)

            {                

                spi.WriteRead(writeBufferX, readBuffer, 1);

                d1 = (readBuffer[0] << 8 | readBuffer[1])>>4;

                if (d1 == d2) break;

                d2 = d1;  

            }

            uy = d1;

            //--

            d2 = 0xFFFF;

            for (i = 0; i < 2; i++)

            {

                spi.WriteRead(writeBufferY,readBuffer, 1);

                d1 = (readBuffer[0] << 8 | readBuffer[1]) >> 4;

                if (d1 == d2) break;

                d2 = d1;

            }

            ux = d1;

        }

     以上函数获取的其实并不是我们习惯的屏幕坐标,如(0,0-320,240),获取的数据需要转换才成,这部分代码我在示例中没有添加,希望有兴趣的网友当做一个练习,自己做一下,相关算法可以参考如下文章:

     http://wenku.baidu.com/view/b163984d2b160b4e767fcf39.html

  示例代码运行后的效果图如下,你直接在屏幕上进行敲击,就可以在屏幕上看到相应的坐标变化:

   

            

   注意:红牛开发板需要下载最新的V0.9.5固件才能正常运行。

-----------------------------------------------------------------------------------------

 

 

 






本文转自yefanqiu51CTO博客,原文链接:http://blog.51cto.com/yfsoft/359377,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
TestNG学习-运行一个测试实例
TestNG学习-运行一个测试实例
0 0
运筹优化学习13:C#中Gurobi的配置及测试
运筹优化学习13:C#中Gurobi的配置及测试
0 0
【29】知识蒸馏(knowledge distillation)测试以及利用可学习参数辅助知识蒸馏训练Student模型
【29】知识蒸馏(knowledge distillation)测试以及利用可学习参数辅助知识蒸馏训练Student模型
0 0
深聊测开领域之:一文搞懂什么是敏捷测试,如何做敏捷测试,建议先收藏再学习。
深聊测开领域之:一文搞懂什么是敏捷测试,如何做敏捷测试,建议先收藏再学习。
0 0
HLS开发学习-09- 描述高效的C测试平台
HLS开发学习-09- 描述高效的C测试平台
0 0
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
HLS开发学习-08- Vivado HLS下C_C++测试平台的基本架构
0 0
ESP32-C3 学习测试 蓝牙 篇(一、认识 ESP-IDF 的蓝牙框架、简单的了解蓝牙协议栈)
在我们前面 ESP32-C3 的教程中,从基本的外设,到wifi,到最后使用MQTT连接云平台完成了一个 简单的项目,我们已经掌握了ESP32-C3 的大部分功能了。 但是作为一款蓝牙芯片,蓝牙的使用是必不可少的,今天我们就开始对 ESP32-C3 蓝牙的使用进行学习测试。 蓝牙部分已经不敢叫教学了,为了搞清楚ESP-IDF的那些示例程序到底是关于什么内容, 因为自己也是边学习边测试花了大量时间补充蓝牙的基本知识,希望小伙伴指出不足之处! ...更新说明,ESP32-C3只支持BLE
0 0
react项目实战学习笔记-学习7-ant 引入和测试
react项目实战学习笔记-学习7-ant 引入和测试
0 0
spring学习31-使用junit4测试
spring学习31-使用junit4测试
0 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
ICA安全标准组测试认证分享
立即下载
MaxCompute基于BigBench标准的最新测试进展
立即下载
用AI高效测试移动应用
立即下载