新手上路
- 积分
- 33
- 金钱
- 33
- 注册时间
- 2023-4-24
- 在线时间
- 4 小时
|
今日使用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标准库再下载使用,屏幕不能返回具体的坐标位置而无法触摸
|
|