你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

奇葩问题,来围观,帮我找错....

[复制链接]
wofei1314 提问时间:2015-10-27 18:10 /
#define ExButton1()     GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_14)
#define ExButton2()     GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_12)
程序这样写就会出错,PE12的值读上来一直是1!
        if(ExButton1()==0)   //启动紧急开门1,并记录日志
        {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN1OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//表示应急开门1
        }
        if(ExButton2()==0)   //启动应急开门2,并记录日志
        {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN2OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//52='4',表示应急开门2
        }
程序这样写,读PE12的值就是0
        if((ExButton1()==0) || (ExButton2()==0))
        {
            Door1Open(1);

        }

郁闷了.....不知道怎么回事,有人遇到类似的问题吗?我上面是通用的硬件,其它程序都没有占用IO,正确的是PE12读上来为0 !

收藏 1 评论39 发布时间:2015-10-27 18:10

举报

39个回答
moyanming2013 回答时间:2015-10-27 18:51:46
看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
  1. if((ExButton1()==0) || (ExButton2()==0))
复制代码
你好我好大家好! 回答时间:2015-10-27 18:57:51
这个真不知道
wofei1314 回答时间:2015-10-27 19:56:22
moyanming2013 发表于 2015-10-27 18:51
看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
...

第二个是正确相应的,主要是第一个出错
chifen 回答时间:2015-10-27 21:13:14
你要把PE12设置成输入 带上位的
yanhaijian 回答时间:2015-10-28 09:27:29
moyanming2013 发表于 2015-10-27 18:51
看你的编译器对于||是从左往右还是从右往左,然后如果一旦第一个判断正确,就不做第二个判断了。
...

正解啊。
wofei1314 回答时间:2015-10-28 18:20:14

看来我表述的不好,if(||)这种是没问题的,有问题的是if()。。。if()。。。
wofei1314 回答时间:2015-10-28 18:21:29
chifen 发表于 2015-10-27 21:13
你要把PE12设置成输入 带上位的

上拉下拉都试过了,就是读回来的是1.。。。
chifen 回答时间:2015-10-28 19:03:18
状态输入 ,上位模式,  IO时钟一定要开启,正常是为1的,对短路 会变成0
wofei1314 回答时间:2015-10-28 21:48:55
chifen 发表于 2015-10-28 19:03
状态输入 ,上位模式,  IO时钟一定要开启,正常是为1的,对短路 会变成0

谢谢,同样的程序配置,自然都使能 了时钟,配置了输入模式。。。。。

差别只是用两个if判断还是if(条件1 || 条件2),同样的板子。。。怀疑是keil的问题或者单片机的bug。。。
1234下一页

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版