新手上路
- 积分
- 20
- 金钱
- 20
- 注册时间
- 2018-8-27
- 在线时间
- 3 小时
|
5金钱
本帖最后由 loujichen 于 2018-8-27 14:11 编辑
我用到这款芯片的PA0~PA7 脚作为输入脚,读它的引脚状态,根据引脚是0或者1去做相应动作,配置信息如下。
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;//PA0~PA7
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
引脚外部通过上拉电阻拉高,同时通过轻触开关接地,在开关按下后会被拉低。
在实际使用种发现,测试引脚电平 都符合要求,轻触开关没有按下的时候是3.3V,按下后是0V。
但是利用GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)这个函数去读,得到的值是0。一直没有发现什么原因。
偶然的情况下,发现把PA口 中的任意一个脚设置为输出脚,例如(PA10)(其它PA的脚也可以)配置如下
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
GPIO_InitStructureA.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructureA.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructureA.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructureA.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructureA.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructureA);
并把它设置为高(这里是不是必须要设置成高电平我没有试验)
此时PA0~PA7的读数就正常了,但是不清楚原因。
而且我还有PD口也有一些要读取数据的,难道都必须单独拿一个引脚出来做一个输出口才可以吗?或者是我哪里设置的有问题,请各位大大帮忙解决一下,或者有遇到过类似情况的说一下是什么原因,拜谢~
|
-
-
下位机程序.rar
3.54 MB, 下载次数: 31
所有代码程序,目前PD2口也是这个问题,默认应该是拉高的,测到的电压也是高的,但是PD2读取IO口的状态是0
最佳答案
查看完整内容[请看2#楼]
已解决,问题出在子的函数里定义的初始化,然后再主函数中没有调用(led,key),只调用了led初始化,没有调用key初始化,所以再led中添加PA口任意一个口初始化的时候,从动的把key口初始化打开了,程序就正常了。小问题,但问题找了好久。
|