本帖最后由 八蹄马 于 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的配置状态有关)
下面是触摸屏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
",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
",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的软复位?什么意思,另外这是对应手册上的差值原始值吗?这是什么意思呀?
求解答!!!谢谢拉!!!
哇!!好惨,本来是两点编辑完睡觉的,网页居然坑我没有滑动码!!上传不了,提示保存了,重新打开居然不到一半的草稿,现在都晚上三点了我的天!!有些地方感觉还要更加人性化,当然也不是说原子的不好,只是提一些小意见,添加代码文字那里也是,为什么我的复制后面那段中文注释不能正常显示呢,别人的就可以呢!我的还是自己手动修改的,累呀!!
原子哥这回答也太简洁了吧,但好像你没看清楚程序那里😭,开发指南的步骤的确是先上拉输入,再复位然后浮空输入。但是程序里头不是,最后的是“浮空输出”呀,这是怎么回事?
还有就是弱弱地问,那个temp[4]是干嘛的?
我隐约记得视频那里好像有说,不知道是不是记错了
一周热门 更多>