论武天地论坛

 找回密码
 立即注册
搜索
查看: 4410|回复: 0

2.03-外设篇-GPIO输入检测

[复制链接]

58

主题

58

帖子

244

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
244
发表于 2020-10-27 18:59:44 | 显示全部楼层 |阅读模式




NONOS(2.2.0)NONOS(2.2.0)NONOS(2.2.0)
1.官方提供了以下函数检测引脚输入状态
819239-20200519193619992-1578425244.png



检测GPIO5
  if( GPIO_INPUT_GET(5) == 0 ) GPIO5当前为低电平
  if( GPIO_INPUT_GET(5) == 1 ) GPIO5当前为高电平


检测输入的第一种方式
  在引脚为输出的状态下,检测引脚输入状态
  注:该模式应用于检测引脚输出的高低电平状态.
  
PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U,FUNC_GPIO5);
    GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平(控制继电器吸合)
    if(GPIO_INPUT_GET(5) == 1)
    {
        os_printf("\r\n 继电器引脚输出高电平 \r\n");
    }



819239-20200521011911923-1380571460.png




     819239-20191204152750337-1941350986.png

   819239-20200521012009495-838669735.png




  另外:如果某个引脚控制传感器,传感器本身引脚有很强的拉低能力,也可以用此模式检测
 列如:开发板的GPIO0外接的按钮

   819239-20191204153627722-1095290977.png


  如想检测其是否按下:
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);
  GPIO_OUTPUT_SET(0, 1);//设置GPIO0输出高电平
  if(GPIO_INPUT_GET(0) == 0)
  {
    //按钮按下
  }
  原因:
  即使控制引脚输出了高电平,当按下按钮的时候,引脚接地,引脚强制被拉低.
  注意:如果所接传感器的输出能力不强,则需要看下面第二种方式

检测输入的第二种方式
补充一个知识点
 设置引脚输入上拉 PIN_PULLUP_EN(引脚的寄存器地址)
   819239-20200521012330711-1762245985.png



  检测输入的时候设置管脚为输入然后再做检测
  注:该模式主要应用于和芯片之间通信
  以下为检测GPIO0的输入


PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0作为普通IO功能(如果以前设置过作为普通IO,不需要重复设置)
    GPIO_DIS_OUTPUT(0);//如果以前设置过GPIO为输出,则调用此函数关闭GPIO0输出
    PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//上拉输入


    if(GPIO_INPUT_GET(0) == 0)
    {
        //引脚被拉低
    }

819239-20200521012803571-1037499445.png




RTOS(2.2.0)RTOS(2.2.0)RTOS(2.2.0)
  官方提供了以下函数检测引脚输入状态
     819239-20191204151453058-507062083.png

  检测GPIO5
  if( GPIO_INPUT_GET(5) == 0 ) GPIO5当前为低电平
  if( GPIO_INPUT_GET(5) == 1 ) GPIO5当前为高电平





检测输入的第一种方式
  在引脚为输出的状态下,检测引脚输入状态
  注:该模式应用于检测引脚输出的高低电平状态.
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO5_U , FUNC_GPIO5);
  GPIO_OUTPUT_SET(5, 1);//设置GPIO5输出高电平(控制继电器吸合)
  if(GPIO_INPUT_GET(5) == 1)
  {
    printf(" 继电器引脚输出高电平 ");
  }

   819239-20191204200719026-238616719.png







    

   819239-20191204152815726-1898976642.png




  另外:如果某个引脚控制传感器,传感器本身引脚有很强的拉低能力,也可以用此模式检测

  列如:开发板的GPIO0外接的按钮

  




  如想检测其是否按下:
  PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);
  GPIO_OUTPUT_SET(0, 1);//设置GPIO0输出高电平

  if(GPIO_INPUT_GET(0) == 0)
  {
    //按钮按下
  }


  原因:
  即使控制引脚输出了高电平,当按下按钮的时候,引脚接地,引脚强制被拉低.
  注意:如果所接传感器的输出能力不强,则需要看下面第二种方式



检测输入的第二种方式
  补充一个知识点
  设置引脚输入上拉 PIN_PULLUP_EN(引脚的寄存器地址)
   819239-20191204203347279-1951951117.png


  




  检测输入的时候设置管脚为输入然后再做检测
  注:该模式主要应用于和芯片之间通信
  以下为检测GPIO0的输入
  
  
  // PIN_FUNC_SELECT(PERIPHS_IO_MUX_GPIO0_U , FUNC_GPIO0);//GPIO0作为普通IO功能(以前设置过作为普通IO,不需要重复设置)
  GPIO_DIS_OUTPUT(0);//如果以前设置过GPIO为输出,则调用此函数关闭GPIO0输出
  PIN_PULLUP_EN(PERIPHS_IO_MUX_GPIO0_U);//上拉输入

  if(GPIO_INPUT_GET(0) == 0)
  {
    //引脚被拉低
  }

   819239-20191204204859851-1194099175.png




其它
  配置多个引脚为输入
   819239-20191204205051610-1404709114.png



  GPIO_AS_INPUT(BIT2 | BIT13); //配置GPIO2,GPIO13为输入


copycode.gif
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|论武天地论坛

GMT+8, 2024-11-25 21:20 , Processed in 0.080358 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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