arduion 下stm32 触摸屏

触摸屏我的是电阻屏,基本上也可以直接拷STM32的原代码,稍做修改即可

主要完成SPI的初始化,u8 read_once(void)函数,读取数据即可

 

1.SPI初始化

void SPI1_Init()

{

         //GPIO引脚

         //spi init

  SPI_InitTypeDef1  SPI_InitStructure;



   /* SPI1 configuration */

  SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

  SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

  SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;

  SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;

  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

  SPI_InitStructure.SPI_CRCPolynomial = 7;

  SPI_Init(SPI1, &SPI_InitStructure);

 

    SPI_Cmd(SPI1, ENABLE);

}





2.Read_once函数

//读取一次X,Y值

//读到的X,Y坐标值必须都大于100

//成功返回1,不成功返回0

//读数限制在100~4000之间.

u8 read_once(void)

{ unsigned int a,b;

  TCS_SET(0);

  delay_us(5);      

  SPI_SendByte(CMD_RDY);

  delay_us(5); 

  a=SPI_ReadByte(0);

  a=a<<8;

  a|=SPI_ReadByte(0);

  delay_us(5); 

  TCS_SET(1);   

  a>>=3;

  Y=a;

  delay_us(15);

  TCS_SET(0);

  delay_us(5);  

    SPI_SendByte(CMD_RDX);

  delay_us(5); 

  b=SPI_ReadByte(0);

  b=b<<8;

  b|=SPI_ReadByte(0);

  delay_us(5); 

  b>>=3;

  X=b;  

  TCS_SET(1);

  if(X>100&&Y>100&&X<4000&&Y<4000)return 1;//读数成功(范围限制)

  else return 0;                       //读数失败

}

 

3.触摸屏中断

  attachInterrupt(PEN, intcallback, GPIO_MODE_IT_FALLING) ;  //触摸屏中断

 

 

 

 

 

 

 

 

http://www.stmcu.org/module/forum/thread-608305-1-2.html

http://bbs.mydigit.cn/read.php?tid=2160961

猜你喜欢

转载自blog.csdn.net/qq_39239990/article/details/82255507