OpenEdv-开源电子网

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

求助按键点灯实验,一直会亮,严重怀疑GPIO_ReadInputDataBit()

[复制链接]

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
发表于 2020-4-15 21:24:32 | 显示全部楼层 |阅读模式
1金钱
按键点灯实验问题:
不使用正点原子模板,战舰开发板

感觉这个GPIO_ReadInputDataBit()函数有问题,虽然看得是返回0和1,但是配合上拉就是有问题,把PA0的改成浮空又是有问题。。。
1.PNG
2.PNG
3.PNG

最佳答案

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

PA0本来就是按下高电平,你居然上拉,自然百分百都是一直按下的状态了。。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2020-4-15 21:24:33 | 显示全部楼层
PA0本来就是按下高电平,你居然上拉,自然百分百都是一直按下的状态了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-15 21:26:30 | 显示全部楼层
代码实验结果是LED0一直亮,KEY0、KEY1、KEY2按键会让LED0灭,但是一松开就继续亮。这个GPIO_ReadInputDataBit()函数一直返回1???原因有人知道吗
回复

使用道具 举报

11

主题

99

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5568
金钱
5568
注册时间
2015-11-5
在线时间
712 小时
发表于 2020-4-15 23:39:41 | 显示全部楼层
你这程序问题有点多啊。
1、KEY_Scanf函数没有正常情况下的返回值,比如什么都不按的时候应该返回非0、非1,比如返回2。
2、最好加上消抖逻辑。
3、main函数里不要调用2次KEY_Scanf,你可以搞个变量去接收KEY_Scanf的返回值,再做判断。
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-16 08:06:20 | 显示全部楼层
正点原子 发表于 2020-4-15 21:24
PA0本来就是按下高电平,你居然上拉,自然百分百都是一直按下的状态了。。。

原子哥,我还是没有弄懂。我这个PA0设置的是下拉。。

GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPD;       
GPIO_InitStruct.GPIO_Pin        =        GPIO_Pin_0;                                                       
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;                               
GPIO_Init(GPIOA,&GPIO_InitStruct);
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-4-16 14:43:38 | 显示全部楼层
所以是啥问题
猪猪熊呢?
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-16 15:22:16 | 显示全部楼层
逍遥叹乄 发表于 2020-4-15 23:39
你这程序问题有点多啊。
1、KEY_Scanf函数没有正常情况下的返回值,比如什么都不按的时候应该返回非0、非1 ...

恩,我还没有写完善就有问题了,下拉之后读就一直有问题。问题主要是PA0.
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-16 15:47:14 | 显示全部楼层

战舰版PA0口接的灯,配置下拉后,使用GPIO_ReadInputDataBit()会一直返回1
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-4-16 15:50:28 | 显示全部楼层
bbq 发表于 2020-4-16 15:47
战舰版PA0口接的灯,配置下拉后,使用GPIO_ReadInputDataBit()会一直返回1

你那个KEY_Scanf函数默认返回值没给呀,如果按键都没按下,返回几呢?
猪猪熊呢?
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-4-16 15:51:17 | 显示全部楼层
bbq 发表于 2020-4-16 15:47
战舰版PA0口接的灯,配置下拉后,使用GPIO_ReadInputDataBit()会一直返回1

最好是一个按键一个返回值,PA0按下返回1,第二个按键按下返回2这样,无按键按下时返回0
猪猪熊呢?
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-16 16:23:19 | 显示全部楼层
323232 发表于 2020-4-16 15:51
最好是一个按键一个返回值,PA0按下返回1,第二个按键按下返回2这样,无按键按下时返回0

太神奇了加个返回值确实正常了,但是不知道为什么不加就只会一直返回1。。
回复

使用道具 举报

52

主题

247

帖子

0

精华

高级会员

Rank: 4

积分
997
金钱
997
注册时间
2017-8-19
在线时间
160 小时
 楼主| 发表于 2020-4-16 16:29:32 | 显示全部楼层
323232 发表于 2020-4-16 15:50
你那个KEY_Scanf函数默认返回值没给呀,如果按键都没按下,返回几呢?

按键没按下不知道返回几确实是个问题,但是它返回1了 我的C语言不过关,为什么会返回1呢
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-4-16 18:17:13 | 显示全部楼层
bbq 发表于 2020-4-16 16:29
按键没按下不知道返回几确实是个问题,但是它返回1了 我的C语言不过关,为什么会返回1呢

你不加返回的应该是默认值1吧,我也不太清楚
猪猪熊呢?
回复

使用道具 举报

9

主题

796

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2038
金钱
2038
注册时间
2017-8-2
在线时间
522 小时
发表于 2020-4-16 18:19:30 | 显示全部楼层
bbq 发表于 2020-4-16 16:29
按键没按下不知道返回几确实是个问题,但是它返回1了 我的C语言不过关,为什么会返回1呢

推荐你用状态机按键,比扫描检测的实用。
猪猪熊呢?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-25 11:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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