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

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

[复制链接]
wofei1314 提问时间:2015-10-27 18:10 /
阅读主题, 点击返回1楼
收藏 1 评论39 发布时间:2015-10-27 18:10
39个回答
jiaswang 回答时间:2015-10-29 12:15:57
wofei1314 发表于 2015-10-28 18:20
看来我表述的不好,if(||)这种是没问题的,有问题的是if()。。。if()。。。 ...

if()
……
else
;
if()
……
else

或者用if ()
……
else if()
……
wofei1314 回答时间:2015-10-30 09:33:02

不可以分开判断吗?
if(条件1)
{
   函数1
}


if(条件2)
{

函数2
}

条件1和条件2无关,if  。。else。。 这个我倒是没试过...
wofei1314 回答时间:2015-10-30 09:33:53
chifen 发表于 2015-10-29 11:42
(GPIOE>IDR & GPIO_Pin_12 )  
   (GPIOE>IDR & GPIO_Pin_14)
这样试试,我读都是这样的 ,好像没有出 ...

我用的是库函数,应该不会是这个问题吧...
chifen 回答时间:2015-10-30 10:10:02
哪种库 HAL    HAL_GPIO_ReadPin(GPIOE,GPIO_PIN_12)
wofei1314 回答时间:2015-10-30 11:11:40
3.5的标准库
拉肚肚 回答时间:2015-10-30 13:00:55
路过~~~~支持下
chifen 回答时间:2015-10-30 13:13:38
标准库支持的,可能直接使用
chifen 回答时间:2015-10-30 13:19:26
我今天发现  if 语句里最好不要运算的太多 例子: y=1; t=0x20 ;        if(((t&0x80)==0)&&y==1)   这样条件应该成立进入 才对,但这时是进入不了的
wofei1314 回答时间:2015-10-30 13:29:04
chifen 发表于 2015-10-30 13:19
我今天发现  if 语句里最好不要运算的太多 例子: y=1; t=0x20 ;        if(((t&0x80)==0)&&y==1)   这样条件应该 ...

我就读IO口而已...
windsky-2021230 回答时间:2015-10-30 14:20:32
你就用||的方式,一清二楚。
至于为什么单独
if(按键1) if(按键2)
的方式读回来的值都是1,就不要深究了吧。可能是芯片的问题。
windsky-2021230 回答时间:2015-10-30 14:23:17
或者这样写试下:

        if(ExButton1())   
        {}
        else
        {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN1OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//表示应急开门1
        }
        if(ExButton2())
        {}
        else
        {
            q_doorcmd = DOOR_STATE_OPEN;
            trig_openstyle = R_TRIG_EXBTN2OPEN;
            RecordDoorState(trig_openstyle,DOOR_STATE_OPEN);//52='4',表示应急开门2
        }
zhoupxa 回答时间:2015-10-30 14:43:38
这个问题一点都不奇葩。
从功能逻辑和C语言语法来看,第一段程序和第二段程序都能在检测到开门按钮1或2按下时完成开门动作(当然第一段程序还有相应的日志记录),只能说是没有正确采集到开门按钮1或2的状态而已,应该从GPIO PE12的输入状态采集是否正确入手DEBUG。
另外,GPIO PE14的状态采集正确吗?
zhoupxa 回答时间:2015-10-30 14:45:09
wofei1314 发表于 2015-10-28 21:48
谢谢,同样的程序配置,自然都使能 了时钟,配置了输入模式。。。。。

差别只是用两个if判断还是if(条 ...

尽量从自己的硬件、软件找问题,不要轻易认为编译器或MCU如何如何
wofei1314 回答时间:2015-10-30 16:25:39
zhoupxa 发表于 2015-10-30 14:45
尽量从自己的硬件、软件找问题,不要轻易认为编译器或MCU如何如何

同样的板子,说明硬件是一样的,差别只是程序,IO配置都一样,所以才无语,回头试试,看看汇编代码的区别以排除编译器的问题...
wofei1314 回答时间:2015-10-30 16:28:28
zhoupxa 发表于 2015-10-30 14:43
这个问题一点都不奇葩。
从功能逻辑和C语言语法来看,第一段程序和第二段程序都能在检测到开门按钮1或2按下 ...

是的,GPIOE 14采集完全正确,GPIOE 12读就一直为1,正确应该为0....

主要是在同样的板子上,同样的按钮触发,但是程序上只有这儿有区别...

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版