打印
[STM8]

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

[复制链接]
3369|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2016-8-3 22:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
一直以来,忘了从哪款芯片转过来的,总以为
BitStatus GPIO_ReadInputDataBit  ( GPIO_TypeDef *  GPIOx,  
  GPIO_Pin_TypeDef  GPIO_Pin  
)
这个函数读取到的是某个Pin的电平状态,返回的是0或者是1.而函数的返回类型也是BitStatue,这个原型的定义如下:
typedef enum FlagStatus BitStatus 
enum FlagStatus 

Enumerator:
RESET   
SET  
总以为返回值是RESET或者是SET。其实不是。
以PC3为例,当PC3接高电平的时候,GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)的返回值是0x04。接低电平的时候返回的是0。
以PB4为例,当PB4接高电平的时候,GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)的返回值是0x10。接低电平的时候返回的是0。
仔细看看库手册中是怎么说的呢?
Return values:
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

主题

19332

帖子

107

粉丝