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

 找回密码
 立即注册
搜索
热搜: PT32 BLDCM Motor USB
查看: 60109|回复: 0
打印 上一主题 下一主题

PT32读取GPIO的三态

[复制链接]

174

主题

198

帖子

1622

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1622
跳转到指定楼层
楼主
发表于 2017-5-25 15:28:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能:读取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);
    }
}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

蜀ICP备16008743号-1|普诚科技公司|小黑屋|普誠創智(成都)科技有限公司-论坛  

GMT+8, 2024-11-22 07:48 , Processed in 2.178619 second(s), 22 queries .

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