[STM8] STM8L15x系列-GPIO_ReadInputDataBit()函数的用法,你了解了吗?

[复制链接]
4131|3
 楼主| xyz549040622 发表于 2016-8-3 22:47 | 显示全部楼层 |阅读模式
一直以来,忘了从哪款芯片转过来的,总以为
  1. BitStatus GPIO_ReadInputDataBit  ( GPIO_TypeDef *  GPIOx,  
  2.   GPIO_Pin_TypeDef  GPIO_Pin  
  3. )
这个函数读取到的是某个Pin的电平状态,返回的是0或者是1.而函数的返回类型也是BitStatue,这个原型的定义如下:
  1. typedef enum FlagStatus BitStatus
  1. enum FlagStatus

  2. Enumerator:
  3. RESET   
  4. SET  
总以为返回值是RESET或者是SET。其实不是。
以PC3为例,当PC3接高电平的时候,GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)的返回值是0x04。接低电平的时候返回的是0。
以PB4为例,当PB4接高电平的时候,GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)的返回值是0x10。接低电平的时候返回的是0。
仔细看看库手册中是怎么说的呢?
  1. Return values:
  2. BitStatus : GPIO input pin status.  
GPIO输入引脚的状态。这里实际应该理解为所用引脚GPIO组屏蔽其他引脚状态后的port值。
所以,当我们应用某个IO为输入引脚,判断这个引脚的电平状态的时候,是不可以用
if(GPIO_ReadInputDataBit == 1)这样的语句的,在设置为输入引脚的时候,必须要注意,切记,切记。

lulugl 发表于 2016-8-7 23:15 | 显示全部楼层
if((GPIOX->IDR&GPIO_PIN_x<<x)==0,或1)
 楼主| xyz549040622 发表于 2016-8-8 09:36 | 显示全部楼层
lulugl 发表于 2016-8-7 23:15
if((GPIOX->IDR&GPIO_PIN_x

你这是用的寄存器,而且这个x是需要自己修改的。
lulugl 发表于 2016-8-9 21:47 | 显示全部楼层
对的,我以前也象你讲的那用,被坑了不少
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2841

主题

19330

帖子

110

粉丝
快速回复 在线客服 返回列表 返回顶部