野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12334|回复: 5

[emWin] 使用STM32F103 HAL库跑EMWIN,电阻屏触摸检测有问题?!!!

[复制链接]
发表于 2020-12-1 17:09:58 | 显示全部楼层 |阅读模式
使用野火stm32F103ZET6霸道标准库中的emwin例程。触摸校准,检测可以全屏幕触摸。屏幕分辨率(320*240)

但是,现在改成HAL库版本,XT2046使用野火HAL库版本的底层驱动,发现进行触摸检测时,只能在固定小区域触摸,不能满尺寸触摸。

屏幕方向,尺寸,emwin配置等等都一致,唯一区别是标准库与HAL库。

使用HAL库触摸最大模拟输入为X:2047  Y:2047

手指触摸在边缘,十字箭头移动不过来

手指触摸在边缘,十字箭头移动不过来
回复

使用道具 举报

 楼主| 发表于 2020-12-1 17:37:00 | 显示全部楼层
  标准库:

if(macXPT2046_INT_Read()== macXPT2046_INT_ActiveLevel)
  {
    for(i = 0;i < SAMP_CNT;i++)
    {
      XPT2046_WriteCMD(channel);
      tempXY[i] = XPT2046_ReadCMD();
                        printf("tempXY[i] =  %d\r\n",tempXY[i]);                       
    }

HAL库:
  if(XPT2046_PENIRQ_Read()== XPT2046_PENIRQ_ActiveLevel)
  {
    for(i = 0;i < SAMP_CNT;i++)
    {
      XPT2046_WriteCMD(channel);
      tempXY[i] = XPT2046_ReadCMD();
                        printf("tempXY[i] =  %d\r\n",tempXY[i]);                               
    }

从printf打印,XPT2046_ReadCMD();读取。标准库能到3890,HAL库最多到2047..

但是追进去看,基本是一样的:
static uint16_t XPT2046_ReadCMD ( void )
{
        uint8_t i;
        uint16_t usBuf=0, usTemp;
       


        macXPT2046_MOSI_0();

        macXPT2046_CLK_HIGH();

        for ( i=0;i<12;i++ )
        {
                macXPT2046_CLK_LOW();   
       
                usTemp = macXPT2046_MISO();
               
                usBuf |= usTemp << ( 11 - i );
       
                macXPT2046_CLK_HIGH();
               
        }
       
        return usBuf;

}

HAL:
static uint16_t XPT2046_ReadCMD ( void )
{
        uint8_t i;
        uint16_t usBuf=0, usTemp;
        XPT2046_MOSI_0();
        XPT2046_CLK_HIGH();
        for ( i=0;i<12;i++ )
        {
                XPT2046_CLK_LOW();  
               
                usTemp = XPT2046_MISO();
               
                usBuf |= usTemp << ( 11 - i );
               
                XPT2046_CLK_HIGH();
        }
        return usBuf;
}



这就很奇怪

回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-2 09:02:27 | 显示全部楼层
不会没人改成HAL版本吧
回复 支持 反对

使用道具 举报

发表于 2020-12-3 10:36:02 | 显示全部楼层
单独跑HAL库的裸机触摸例程是否正常?比如触摸画板例程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 14:50:41 | 显示全部楼层
ZZZ_XXJ 发表于 2020-12-3 10:36
单独跑HAL库的裸机触摸例程是否正常?比如触摸画板例程

那个没试,新做的板子,最后调了隔壁原子的触摸
uint16_t TP_Read_XOY(uint8_t xy)
{
        uint16_t i, j;
        uint16_t buf[READ_TIMES];
        uint16_t sum=0;
        uint16_t temp;
        for(i=0;i<READ_TIMES;i++)buf=TP_Read_AD(xy);                                     
        for(i=0;i<READ_TIMES-1; i++)//排序
        {
                for(j=i+1;j<READ_TIMES;j++)
                {
                        if(buf>buf[j])//升序排列
                        {
                                temp=buf;
                                buf=buf[j];
                                buf[j]=temp;
                        }
                }
        }          
        sum=0;
        for(i=LOST_VAL;i<READ_TIMES-LOST_VAL;i++)sum+=buf;
        temp=sum/(READ_TIMES-2*LOST_VAL);
        return temp;   
}


最后才管用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-12-3 14:53:43 | 显示全部楼层
准备后续有空再仔细查查。我一个标准库版本触摸是没问题的,调用HAL底层。其实两个基本一样,按理说不会出现这种现象的,但是很奇怪出现了,既然调用了原子的读取ADC采集并滤波。那依此可以推出,HAL库的触摸ADC读取并滤波那部分有点问题,可能延时时序可能其他
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-4-24 04:13 , Processed in 0.056984 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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