打印
[STM32F1]

GPIO_ReadInputDataBit()函数的返回值

[复制链接]
5229|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
will1024|  楼主 | 2015-11-3 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想用GPIO的输入值做判断, 但是GPIO不是连续的,无法直接用 ReadInputData(GPIOx); 只能单独GPIO_ReadInputDataBit(), 我想知道这个函数的返回值是什么啊?  是0或1么?   我想用8个IO口读取的数据组成一个8位二进制数,需要 a<<!   |  b<<2  | c<<3  d<<4 ... 这样的移位操作么? a,b,c,d ...为readinputdatabit的返回值。
沙发
will1024|  楼主 | 2015-11-3 15:14 | 只看该作者
GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2)  那这样的返回值又是什么啊?

使用特权

评论回复
板凳
123654789| | 2015-11-3 15:41 | 只看该作者
哈哈  这些问题真搞笑

使用特权

评论回复
地板
123654789| | 2015-11-3 15:52 | 只看该作者
第1   想用GPIO的输入值做判断, 但是GPIO不是连续的,

     不连续也可以判断啊
     例如
     A=ReadInputData(GPIOA);
     如果你用了 PA0 , 用了PA2, 不用PA1
       对PA0做判断 , 就先A&0xfffe, 再判断啊  (假设低电平0就表示按下)
       对PA2做判断 , 就先A&0xfffb,  再判断啊  (假设低电平0就表示按下)

第2
      GPIO_ReadInputDataBit() , GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0 | GPIO_Pin_1 |GPIO_Pin_2)  
   既然是Bit,那么就当然一个Bit对应一个脚,所以你就不能把这么多个脚 或 运算啊  


自己去看函数的原型啊  !!!!


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  uint8_t bitstatus = 0x00;
  
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
  
  if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
  {
    bitstatus = (uint8_t)Bit_SET;
  }
  else
  {
    bitstatus = (uint8_t)Bit_RESET;
  }
  return bitstatus;
}

使用特权

评论回复
5
xuyaqi| | 2015-11-3 16:18 | 只看该作者
看看 单片机基础,这些问题用“与”“或”的办法就可以搞定。

使用特权

评论回复
6
will1024|  楼主 | 2015-11-4 10:32 | 只看该作者
123654789 发表于 2015-11-3 15:52
第1   想用GPIO的输入值做判断, 但是GPIO不是连续的,

     不连续也可以判断啊

请问, 假设 a=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0 )=0, b=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)=1,  c=GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)=1;     我可否这样 a | (b<<1) | (c<<2) =
0x06  ?   我这样理解有错误么?

使用特权

评论回复
7
taobaofarmer| | 2015-11-4 10:39 | 只看该作者
看看函数原型就清楚了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

7

帖子

0

粉丝