OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4473|回复: 2

关于战舰V4板子T9拼音输入法实验屏幕无法使用问题

[复制链接]

1

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-4-24
在线时间
4 小时
发表于 2023-4-24 16:41:41 | 显示全部楼层 |阅读模式
今日使用stm32f103zet6战舰板子V4做拼音输入法实验,下载了V4板子的寄存器工程,进行校验后,使用正常,又要寄存器和Hal库使用不熟练,于是寻找到V3的标准库工程并下载下来进行操作,发现下载后屏幕一直不能触摸,并且校验key按钮也无反应,进而调试。
第一步:调试按键KEY2为何无反应
主函数中:
                key=KEY_Scan(0);
                if(key==KEY2_PRES&&tp_dev.touchtype==0)//KEY2按下,且是电阻屏
                {
                        tp_dev.adjust();
                        LCD_Clear(WHITE);
                        goto RESTART;
                }

发现tp_dev.touchtype == 0x0A了,无法进入

第二步:find:tp_dev.touchtype查询在那变动的
u8 TP_Get_Adjdata(void)
{                                          
        u8 temp;
        temp=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+12);//读取标记字,看是否校准过!                  
        if(temp==0X0A)//触摸屏已经校准过了                          
        {
                AT24CXX_Read(SAVE_ADDR_BASE,(u8*)&tp_dev.xfac,12);//读取之前保存的校准数据
                if(tp_dev.touchtype)//X,Y方向与屏幕相反
                {
                        CMD_RDX=0X90;
                        CMD_RDY=0XD0;         
                }else                                   //X,Y方向与屏幕相同
                {
                        CMD_RDX=0XD0;
                        CMD_RDY=0X90;         
                }                 
                return 1;         
        }
        return 0;
}       

发现校验这运行完tp_dev.touchtype从0变成0x0A

第三步:对比v4寄存器此函数
uint8_t tp_get_adjust_data(void)
{
    uint8_t *p = (uint8_t *)&tp_dev.xfac;
    uint8_t temp = 0;

    /* 由于我们是直接指向tp_dev.xfac地址进行保存的, 读取的时候,将读取出来的数据
     * 写入指向tp_dev.xfac的首地址, 就可以还原写入进去的值, 而不需要理会具体的数
     * 据类型. 此方法适用于各种数据(包括结构体)的保存/读取(包括结构体).
     */
    at24cxx_read(TP_SAVE_ADDR_BASE, p, 12);               /* 读取12字节数据 */
    temp = at24cxx_read_one_byte(TP_SAVE_ADDR_BASE + 12);   /* 读取校准状态标记 */

    if (temp == 0X0A)
    {
        return 1;
    }

    return 0;
}

发现TP_SAVE_ADDR_BASE + 12校验读取位置偏移为12,而V3标准库为14;

结论,V4寄存器下载后进行校验,把数据结果存入at24cxx,在V3标准库下载后,程序读取位置偏移为14而V4存的数据从12偏移位置存起的,所有V3标准库读取的校验数据错位,数据拿取错误,进而触摸无效,而KEY按键校验的判断又需要”读取“的屏幕标志(屏幕标志变动为0x0A具体怎么变的未找),重新校验不了,所有V4寄存器版下载校验后,V3标准库再下载使用,屏幕不能返回具体的坐标位置而无法触摸


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-4-24
在线时间
4 小时
 楼主| 发表于 2023-4-24 16:44:17 | 显示全部楼层
V3标准库校验数据获取函数
u8 TP_Get_Adjdata(void)
{                                          
        u8 temp;
        temp=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+14);//读取标记字,看是否校准过!                  
        if(temp==0X0A)//触摸屏已经校准过了                          
        {
                AT24CXX_Read(SAVE_ADDR_BASE,(u8*)&tp_dev.xfac,14);//读取之前保存的校准数据
                if(tp_dev.touchtype)//X,Y方向与屏幕相反
                {
                        CMD_RDX=0X90;
                        CMD_RDY=0XD0;         
                }else                                   //X,Y方向与屏幕相同
                {
                        CMD_RDX=0XD0;
                        CMD_RDY=0X90;         
                }                 
                return 1;         
        }
        return 0;
}
主贴由于已经更改,所有12
回复 支持 反对

使用道具 举报

1

主题

4

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2023-4-24
在线时间
4 小时
 楼主| 发表于 2023-4-24 16:45:22 | 显示全部楼层
细节并没有去做思考,如果遇到类似的操作,可以看看这个地方
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 11:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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