什么是GPIO操作

描述

1、GPIO 工作模式

 

(1)输入模式(模拟、上拉、下拉、浮空)

         输入模式可以配置为模拟、上拉、下拉以及浮空模式。上拉和下拉输入很好理解,默认的电平由上拉或者下拉决定。浮空输入的电平是不确定的,完全由外部的输入决定,一般接按键的时候可以使用这个模式。模拟输入则用于 ADC 采集。

 

(2)输出模式(推挽/开漏)

        在输出模式中,推挽模式时双 MOS 管以推挽方式工作,输出数据寄存器GPIOx_ODR 可控制 I/O 输出高低电平。开漏模式时,只有 N-MOS 管工作,输出数 据 寄 存 器 可 控 制 I/O 输 出 高 阻 态 或 低 电 平 。

 

(3)复用功能(推挽/开漏)

         复用功能模式中,输出使能,输出速度可配置,可工作在开漏及推挽模式,但是输出信号源于其它外设,输出数据寄存器 GPIOx_ODR 无效;输入可用,通过输入数据寄存器可获取 I/O 实际状态,但一般直接用外设的寄存器来获取该数据信号。

 

(4)模拟输入输出(上下拉无影响)
 

         模拟输入输出模式中,双 MOS 管结构被关闭,施密特触发器停用,上/下拉也被禁止。其它外设通过模拟通道进行输入输出。

 

 

adc

 

2、GPIO驱动源码
 

#include "stm32f10x.h"

void LED_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;        //定义结构体变量
  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//开启时钟
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;        //选择你要设置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;     //设置推挽输出模式
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;      //设置传输速率
  GPIO_Init(GPIOC,&GPIO_InitStructure);            //初始化GPIO
  
  GPIO_SetBits(GPIOC,GPIO_Pin_0);             //将LED端口拉高,熄灭所有LED
}

void KEY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;         //定义结构体变量  
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启时钟
  
  GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;           //选择你要设置的IO口
  GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;      //下拉输入  
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;  //设置传输速率
  GPIO_Init(GPIOA,&GPIO_InitStructure);          //初始化GPIO
}

int main( void )
{
  LED_Init();
  KEY_Init();
  while(1)
  {
    //如果按键按下(不进行消抖,因为只是测试GPIOA_0是否拉低)
    if( GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) )
    {
      GPIO_ResetBits(GPIOC,GPIO_Pin_0);
    }
    else
    {
      GPIO_SetBits(GPIOC,GPIO_Pin_0);
    }
  }
}

 

--END--

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分