OpenEdv-开源电子网

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

关于触摸屏实验中GT9147初始化的几个问题,因为看了几个帖子都是感觉很摸棱两可的回答

[复制链接]

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-11-11
在线时间
35 小时
发表于 2019-3-13 02:19:52 | 显示全部楼层 |阅读模式
20金钱
本帖最后由 八蹄马 于 2019-3-13 13:58 编辑

首先我是一直从实验1做到了实验28触摸屏实验,其中也遇到了很多的问题,谢谢很多朋友以及原子哥的答疑,让我在一年里从小白变成入门生。
当然,实验的程序也是有一些小的错误,这个对于刚接触单片机的新手来说无疑是一些很费时间去思考的地方,这也促使我发贴找出正点原子例程中的错误,并寻求答案。帮助同时学习的新手朋友们。
正点原子的工程师也是人,有一些小差错是无可厚非,所以也很谢谢原子哥一直这么耐心地去解答。我也知道原子哥很忙,但真的很希望原子哥能说出自己的逻辑想法,而不是丢给我们自己去试验,因为有些东西真的是需要知其然,更要知其所以然,每个人的逻辑思考都不一样,所以需要一起讨论学习。接下来,我还是要照常摆出一些关于触摸屏实验例程中GT9147初始化函数u8 GT9147_Init(void)程序上的小问题和一些小疑惑。

         第一个问题例程程序中,程序与注释不符:(说的是浮空输入,为什么又设置成输出模式,看了几个帖,有些人的的确是输入模式,包括F4的开发指南也是输入模式)

[mw_shl_code=c,true]        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PB1设置为浮空输入
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化 [/mw_shl_code]

       第二个问题就是上面括号里说的例程程序与开发指南的介绍程序有出入(开发指南上的程序最后是将PB1设置成浮空输入的,而例程程序中最后是将PB1设置成所谓的“浮空输出”,另外一个帖子上原子哥也说没有浮空输出,只有浮空输入,其实摸棱两可很多情况下是因为原子哥没有理解到我们程序例程中出现了一些小错误,也有可能是更新的不同导致跟指南手册不一致,从而衍生出很多其实本来没有必要的纠错帖):
下面截图是开发指南中的程序(正如手册上说的,IIC地址设定与INT的配置状态有关)
QQ截图20190313012811.png
QQ截图20190313013719.png
下面是触摸屏GT9147初始化程序  u8 GT9147_Init(void)中前半部分:
[mw_shl_code=c,true]u8 GT9147_Init(void)
{
        u8 temp[5];
        GPIO_InitTypeDef  GPIO_InitStructure;        
        
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOB,C时钟

  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 ;//PB1设置为上拉输入
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//输入模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
               
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//PC13设置为推挽输出
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
        GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化
        
        CT_IIC_Init();              //初始化电容屏IIC总线
        GT_RST=0;                                //复位
        delay_ms(10);
         GT_RST=1;                                //释放复位
        delay_ms(10);
        
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PB1设置为浮空输入
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化[/mw_shl_code]
      这样子以来,真的是有点混乱。。。。。
             第三个问题下面是GT9147初始化程序中的后半部分
[mw_shl_code=c,true]GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//PB1设置为浮空输入
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出模式
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
        GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
        
        delay_ms(100);  
        GT9147_RD_Reg(GT_PID_REG,temp,4);//读取ID
        temp[4]=0;
        printf("CTP ID:%s\r\n",temp);        //打印ID
        if(strcmp((char*)temp,"9147")==0)//ID==9147
        {
                temp[0]=0X02;                        
                GT9147_WR_Reg(GT_CTRL_REG,temp,1);//软复位GT9147
                GT9147_RD_Reg(GT_CFGS_REG,temp,1);//读取GT_CFGS_REG寄存器
                if(temp[0]<0X60)//默认版本比较低,需要更新flash配置
                {
                        printf("Default Ver:%d\r\n",temp[0]);
                        GT9147_Send_Cfg(1);//更新并保存配置
                delay_ms(10);
                temp[0]=0X00;         
                GT9147_WR_Reg(GT_CTRL_REG,temp,1);//结束复位
                return 0;
        }
        return 1;
}[/mw_shl_code]

这里的temp[5]中的最后一个数temp[4]到底是嘛用的?实在是没看懂
temp[0]=0x02是GT9147的软复位?什么意思,另外这是对应手册上的差值原始值吗?这是什么意思呀?
求解答!!!谢谢拉!!!


哇!!好惨,本来是两点编辑完睡觉的,网页居然坑我没有滑动码!!上传不了,提示保存了,重新打开居然不到一半的草稿,现在都晚上三点了我的天!!有些地方感觉还要更加人性化,当然也不是说原子的不好,只是提一些小意见,添加代码文字那里也是,为什么我的复制后面那段中文注释不能正常显示呢,别人的就可以呢!我的还是自己手动修改的,累呀!!

最佳答案

查看完整内容[请看2#楼]

1,有时候注释有误,以代码为准。 2,还是要看代码,以代码为准,先设置INT位上拉输入(PB1),在复位阶段,确定ID。在复位完成以后,PB1做浮空输入,采集终端信号,没毛病。3,看9147的数据手册和编程手册。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2019-3-13 02:19:53 | 显示全部楼层
1,有时候注释有误,以代码为准。
2,还是要看代码,以代码为准,先设置INT位上拉输入(PB1),在复位阶段,确定ID。在复位完成以后,PB1做浮空输入,采集终端信号,没毛病。3,看9147的数据手册和编程手册。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-11-11
在线时间
35 小时
 楼主| 发表于 2019-3-14 13:53:08 | 显示全部楼层
nobody can answer the questions for me?!!help!
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-11-11
在线时间
35 小时
 楼主| 发表于 2019-3-16 23:22:08 | 显示全部楼层
正点原子 发表于 2019-3-13 02:19
1,有时候注释有误,以代码为准。
2,还是要看代码,以代码为准,先设置INT位上拉输入(PB1),在复位阶段 ...

原子哥这回答也太简洁了吧,但好像你没看清楚程序那里&#128557;,开发指南的步骤的确是先上拉输入,再复位然后浮空输入。但是程序里头不是,最后的是“浮空输出”呀,这是怎么回事?
还有就是弱弱地问,那个temp[4]是干嘛的?
回复

使用道具 举报

9

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
70
金钱
70
注册时间
2018-11-11
在线时间
35 小时
 楼主| 发表于 2019-3-25 13:13:10 | 显示全部楼层
哎,这好蒙呀,一边说要输入另一边又设置成输出,这到底是为啥子呀
回复

使用道具 举报

0

主题

160

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
226
金钱
226
注册时间
2019-3-4
在线时间
4 小时
发表于 2019-3-26 12:45:19 | 显示全部楼层
学习学习!
回复

使用道具 举报

0

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
115
金钱
115
注册时间
2019-7-2
在线时间
27 小时
发表于 2019-7-5 17:29:14 | 显示全部楼层
八蹄马 发表于 2019-3-25 13:13
哎,这好蒙呀,一边说要输入另一边又设置成输出,这到底是为啥子呀

我隐约记得视频那里好像有说,不知道是不是记错了
回复

使用道具 举报

3

主题

13

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2020-9-27
在线时间
23 小时
发表于 2020-10-28 15:22:01 | 显示全部楼层
正点原子 发表于 2019-3-13 02:19
1,有时候注释有误,以代码为准。
2,还是要看代码,以代码为准,先设置INT位上拉输入(PB1),在复位阶段 ...

什么就没毛病  人家问的是设置成浮空输入后为什么又将B1设置为输出
回复

使用道具 举报

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
490
金钱
490
注册时间
2019-12-6
在线时间
153 小时
发表于 2020-10-29 11:46:50 | 显示全部楼层
Lowry 发表于 2020-10-28 15:22
什么就没毛病  人家问的是设置成浮空输入后为什么又将B1设置为输出

人家不是说了吗 注释是错的 以代码为准  这里错就错在注释是错的 原子的很多注释都有问题  以代码为准啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-29 23:02

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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