独闷闷网

 找回密码
 立即注册
搜索
查看: 5811|回复: 0
打印 上一主题 下一主题
收起左侧

[原创] stm8库漏洞,GPIO_ReadInputPin读高电平不是1!而是1和0以外的数!怎么办?已解答。

[复制链接]
跳转到指定楼层
楼主
发表于 2015-6-6 16:41:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
坚鸿-深圳:
刚才在用stm8s105单片机时,发现了stm8固件库的一个漏洞,害得我找了半天才发现。GPIO_ReadInputPin读低电平时是0,但是读取高电平时不是1!而是1和0以外的数!
所以在程序里判断高电平时,应该用if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_1)!=0),绝对不能用if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_1)==1) .比如我以下放在定时中断的按键扫描程序一开始不行:

  1. if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_1)==1)
  2. {
  3. SucKeyLock1=0;
  4. SuiKeyTimeCnt1=0;
  5. }
  6. else if(0==SucKeyLock1)
  7. {
  8. SuiKeyTimeCnt1++;
  9. if(SuiKeyTimeCnt1>const_key_time1)
  10. {
  11. SuiKeyTimeCnt1=0;
  12. SucKeyLock1=1;
  13. GucKeySec=1;
  14. }
  15. }
复制代码

改成如下程序后就正常了:

  1. if(GPIO_ReadInputPin(GPIOC,GPIO_PIN_1)!=0)
  2. {
  3. SucKeyLock1=0;
  4. SuiKeyTimeCnt1=0;
  5. }
  6. else if(0==SucKeyLock1)
  7. {
  8. SuiKeyTimeCnt1++;
  9. if(SuiKeyTimeCnt1>const_key_time1)
  10. {
  11. SuiKeyTimeCnt1=0;
  12. SucKeyLock1=1;
  13. GucKeySec=1;
  14. }
  15. }
复制代码

乐于分享,勇于质疑!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|独闷闷网 ( 粤ICP备12007667号-2 )

GMT+8, 2024-11-30 01:51 , Processed in 0.370258 second(s), 18 queries .

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