`
isiqi
  • 浏览: 16352831 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

【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, false, true, 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固件才能正常运行。

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

【低价开发板】http://item.taobao.com/item.htm?id=7117999726

源码下载:http://www.sky-walker.com.cn/yefan/MFV40/SourceCode/SPITest_ADS7843.rar

文章参考: .Net Micro Framework 快速入门

中文讨论组:http://space.cnblogs.com/group/MFSoft/

分享到:
评论

相关推荐

    安富莱_STM32-V7开发板资料

    安富莱_STM32-V7开发板是一款基于STM32H743XIH6微控制器的开发板,提供多种配置选择,包括4.3寸电阻屏、4.3寸电容屏、5.0寸电阻屏、5.0寸电容屏、7.0寸电阻屏、7.0寸电容屏等,满足不同应用场景的需求。 开发环境 ...

    STM32_Nano开发板--原理图

    STM32_Nano开发板的原理图中会涉及到STM32微控制器的引脚连接,包括了各种通信接口如I2C、SPI、UART、USB以及通用输入输出GPIO等。开发板会为这些引脚提供必要的接口电路,确保外围设备可以和微控制器相连接。例如,...

    STM32F407开发板-标准例程-寄存器版本

    "STM32F407开发板-标准例程-寄存器版本"包含了59个实例,涵盖了STM32F407的所有实验,旨在帮助开发者深入理解和熟练运用该芯片。 STM32F407的核心特性包括: 1. 高性能的32位ARM Cortex-M4内核,运行频率高达180MHz...

    普中STM32-PZ6806L开发板资料-A

    普中STM32-PZ6806L开发板资料光盘结构 | |---1--用户必看 | |--KEIL5安装教程 | |--普中ARM仿真器使用说明 | |--普中PZ6806L开发板入门教程 | |---2--开发板原理图 | |--彩屏原理图-----------------对应...

    STM32F407开发板-以太网-TCP客户端网络通信

    STM32F407开发板是基于ARM Cortex-M4内核的微控制器,具有高性能、低功耗的特点,广泛应用于嵌入式系统设计。在本项目中,我们将重点探讨如何利用STM32F407开发板实现以太网TCP客户端的网络通信功能。 以太网是...

    华清远见STM32MP157开发板FS-MP1A硬件手册一览

    FS-MP1A开发板的主要目标是为开发者提供一个全面的测试和实验平台,用于探索和开发基于STM32MP1系列处理器的应用。它不仅适合初学者学习嵌入式Linux系统,也适用于专业工程师进行复杂项目的设计和调试。 1.2 **产品...

    教程 1、stm32单片机之开发板介绍

    教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32单片机之开发板介绍教程 1、stm32...

    STM32 Nucleo-32带st-link(STM32F103CBT6) 开发板硬件原理图PCB+STM32Cube软件源码

    STM32 Nucleo-32带st-link(STM32F103CBT6) 开发板AD设计硬件原理图+PCB+STM32Cube软件源码,硬件采用4层板设计,大小为50*18mm.可以做为你的学习设计参考。 软件例程: STM32L011K4-Nucleo STM32L031K6-Nucleo STM32L...

    阿波罗STM32F767开发板51-65.rar

    阿波罗STM32F767开发板立场实验51到65部分,实验51 FPU测试(Julia分形)实验,实验52 DSP测试实验,实验53 手写识别实验,实验54 T9拼音输入法实验,实验55 串口IAP实验,实验56 USB读卡器(Slave)实验,实验57 USB...

    ALIENTEK战舰STM32F1 V3开发板原理图

    其中,ALIENTEK战舰STM32F1 V3开发板是一款专门针对STM32F1系列芯片设计的开发平台,它为学习和应用STM32提供了便利。本文将深入探讨该开发板的原理图,揭示其内部构造与工作原理,以便于读者更好地理解和使用。 ...

    STM32F407开发板标准例程-HAL库版本

    STM32F407开发板是基于ARM Cortex-M4内核的一款高性能微控制器,广泛应用于各种嵌入式系统设计。HAL(Hardware Abstraction Layer,硬件抽象层)库是ST公司推出的一种新的固件库,它提供了一种独立于具体硬件的编程...

    stm32f030开发板资料

    在“stm32f030开发板资料”中,我们主要会接触到以下几个关键知识点: 1. **STM32F030架构与特性**: - STM32F030采用32位Cortex-M0处理器,工作频率可达72MHz,具有高速处理能力。 - 内置闪存和SRAM,不同型号的...

    嵌入式-优质嵌入式项目之低功耗STM32F411开发板设计-原理图+PCB源文件+例程+驱动.zip

    本文将详细解析“嵌入式-优质嵌入式项目之低功耗STM32F411开发板设计”的核心知识点,包括STM32F411微控制器、嵌入式系统、低功耗设计原则、开发板设计流程以及相关的硬件资源如原理图和PCB设计,以及软件部分的例程...

    stm32h743-atk-apollo_rtthread_STM32H743_

    STM32H743是意法半导体(STMicroelectronics)推出的一款高性能、低功耗的微控制器,属于STM32系列的高端产品线。它基于Cortex-M7内核,具备强大的处理能力和丰富的外设接口,适用于各种复杂的嵌入式应用。在RT-...

    安富莱_STM32-V6开发板emWin教程_EWIN_stm32_emwin_图形界面_

    STM32-V6开发板上的emWin教程是一个深入学习图形界面设计的重要资源,特别是对于使用EWIN库在STM32微控制器上实现图形用户界面的开发者来说。emWin是一款广泛应用于嵌入式系统的图形库,它提供了丰富的功能,使得...

    STM32F2-F4开发板测试源代码

    STM32F2-F4开发板测试源代码是专为基于STM32F2和STM32F4系列微控制器的开发板设计的一组实践应用示例。这些源代码可以帮助开发者快速理解和掌握STM32F2-F4系列芯片的功能特性,并进行实际项目开发。STM32F40G-EVAL...

    基于STM32F407开发板的ILI9341 软SPI驱动 Keil 篇(兼容正点原子)

    在本文中,我们将深入探讨如何在基于STM32F407的开发板上实现对ILI9341 LCD显示屏的软SPI驱动,同时确保与正点原子(Atom Lite)库的兼容性。这个过程主要涉及到STM32的GPIO、定时器以及SPI接口的配置,以及如何使用...

    神舟3号STM32开发板uC-GUI3.98带触屏模板

    神舟3号STM32开发板作为一款基于STM32芯片的开发平台,为开发者提供了丰富的硬件资源和软件工具,是学习和实践STM32开发的理想选择。而uC-GUI则是一款轻量级的图形用户界面库,专为嵌入式设备设计,它允许在微控制器...

Global site tag (gtag.js) - Google Analytics