普誠創智(成都)科技有限公司-论坛

标题: PT32读取GPIO的三态 [打印本页]

作者: James_Jiang    时间: 2017-5-25 15:28
标题: PT32读取GPIO的三态
功能:读取GPIO三态
源码:
typedef enum
{
   GND=0x00,
   FLOATING=0x02,
   HIGH=0x03,
   GPIOSTATE_UNK=0x04
}t_GPIOSTATE;

//-------------------
uCHAR PinRead(uCHAR GPIOx,uCHAR pin,uCHAR mode)
{
   pGPIOxCtrl[GPIOx]->GPIO_DIR |=  (0x1<<pin); // direction:input
   if( pin <= BIT07 )                                                 // AF0

      pGPIOxCtrl[GPIOx]->GPIO_AFRL &= ~(0xF<<(pin<<2));
    }
   else
    {

       pGPIOxCtrl[GPIOx]->GPIO_AFRH&= ~(0xF<<((pin-BIT08)<<2));  
    }

   pGPIOxCtrl[GPIOx]->GPIO_PUDR &= ~(0x3<<(pin<<1)); // clear PUD (floating mode default)
   pGPIOxCtrl[GPIOx]->GPIO_PUDR |= (mode<<(pin<<1));
   tickWaitus(20,5);

   if ( pGPIOxCtrl[GPIOx]->GPIO_DIO & (0x1<<pin) )
   {

       return(1);
   }
   else
   {

       return(0);
    }
}

//-------------------
t_GPIOSTATE CheckPin(uCHAR GPIOx,uCHAR pin)
{uCHAR pull_up,pull_down;

   pull_up   =    PinRead(GPIOx,pin,0x01);    //  上拉,读取端口状态
   pull_down = PinRead(GPIOx,pin,0x02);   //    下拉,读取端口状态

   switch( (pull_up<<1)|(pull_down<<0) )
   {
        case 0x00:   // 00
           return(GND);
       case 0x03:   // 11
           return(HIGH);
      case 0x02:   // 10
           return(FLOATING);
      default:
           return(GPIOSTATE_UNK);
    }
}







欢迎光临 普誠創智(成都)科技有限公司-论坛 (https://princeton.com.cn/) Powered by Discuz! X3.2