OpenEdv-开源电子网

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

求助原子哥

[复制链接]

4

主题

7

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2013-9-9
在线时间
0 小时
发表于 2014-1-8 11:26:25 | 显示全部楼层 |阅读模式
我在写液晶时把校正数据直接保存到备份寄存器中,为什么单独的读写操作都可以,但保存校正数据读出来就不对了,并且只要运行到读取函数,液晶就不能触屏了,  
void TP_Save_Adjdata(void)
{
s32 temp;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);
PWR_BackupAccessCmd(ENABLE);

temp=tp_dev.xfac*100000000;  
BKP_WriteBackupRegister(BKP_DR3, temp);
temp=tp_dev.yfac*100000000;
BKP_WriteBackupRegister(BKP_DR4, temp);
BKP_WriteBackupRegister(BKP_DR5, tp_dev.xoff);
BKP_WriteBackupRegister(BKP_DR6, tp_dev.yoff);
BKP_WriteBackupRegister(BKP_DR7, tp_dev.touchtype);
BKP_WriteBackupRegister(BKP_DR2, 2);
}
//????±?????????????
void TP_Get_Adjdata(void)
{
s32 tempfac;
tempfac=BKP_ReadBackupRegister(BKP_DR3);
tp_dev.xfac=(double)tempfac/100000000;
tempfac=BKP_ReadBackupRegister(BKP_DR4);
tp_dev.yfac=(double)tempfac/100000000;
tp_dev.xoff=BKP_ReadBackupRegister(BKP_DR5); 
tp_dev.yoff=BKP_ReadBackupRegister(BKP_DR6); 
tp_dev.touchtype=BKP_ReadBackupRegister(BKP_DR7); 
}
备份寄存器初始化在  touch的初始化里面
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-8 18:33:11 | 显示全部楼层
你这完全没有考虑数据溢出的情况,怎么能用?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165538
金钱
165538
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-1-8 18:33:49 | 显示全部楼层
给你看看我的,虽然是写24CXX,但是你写BKP也差不多,只是你的BKP寄存器是16位一个.
//保存校准参数     
void TP_Save_Adjdata(void)
{  
//保存校正结果!        
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE,*((u32*)&tp_dev.xfac),4);   //保存x校正因素(将tp_dev.xfac的地址强制转换为u32类型,再取值) 
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE+4,*((u32*)&tp_dev.yfac),4); //保存y校正因素(将tp_dev.yfac的地址强制转换为u32类型,再取值)  
    AT24CXX_WriteLenByte(SAVE_ADDR_BASE+8,(u16)tp_dev.xoff,2); //保存x偏移量  
AT24CXX_WriteLenByte(SAVE_ADDR_BASE+10,(u16)tp_dev.yoff,2); //保存y偏移量 
AT24CXX_WriteOneByte(SAVE_ADDR_BASE+12,tp_dev.touchtype); //保存触屏类型 
AT24CXX_WriteOneByte(SAVE_ADDR_BASE+13,0X0A);  //标记校准过了
}
//得到保存在EEPROM里面的校准值
//返回值:1,成功获取数据
//        0,获取失败,要重新校准
u8 TP_Get_Adjdata(void)
{   
u8 temp;
temp=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+13);//读取标记字,看是否校准过!   
if(temp==0X0A)//触摸屏已经校准过了    
{      
*((u32*)&tp_dev.xfac)=AT24CXX_ReadLenByte(SAVE_ADDR_BASE,4); //得到x校准参数(将tp_dev.xfac的地址强制转换为u32类型,再赋值)   
*((u32*)&tp_dev.yfac)=AT24CXX_ReadLenByte(SAVE_ADDR_BASE+4,4); //得到y校准参数(将tp_dev.xfac的地址强制转换为u32类型,再赋值) 
tp_dev.xoff=(short)AT24CXX_ReadLenByte(SAVE_ADDR_BASE+8,2); //得到x偏移量
tp_dev.yoff=(short)AT24CXX_ReadLenByte(SAVE_ADDR_BASE+10,2); //得到y偏移量  
  tp_dev.touchtype=AT24CXX_ReadOneByte(SAVE_ADDR_BASE+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;
}
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-15 19:53

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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