STM32片上资源:GPIO

1.GPIO简介

(1)GPIO通用输入输出口

(2)可配置8种输入输出模式,四种输出,四种输入。

(3)引脚电平:0V~3V3,部分引脚可容忍5V.

(4)输出模式下可控制端口输出高低电平。

(5)输入模式下可读取端口的高低电平或电压。

2.GPIO基本结构

3.GPIO使用方法

(1).初始化时钟:RCC_APB2PerphClockCmd()。

(2).定义结构体:GPIO_InitTypeDef GPIO_InitStructure

(3).赋值结构体:

        GPIO_InitSturcture.GPIO_Mode = 选择8中输入输出模式。

        GPIO_InitSturcture.GPIO_Pin =  选择引脚。

        GPIO_InitSturcture.GPIO_Speed = 选择输出速度。

(4).使用GPIO_Init函数将指定外设初始化好。

        

3.1 GPIO使用示例:

int main(void)
{
    //初始化时钟,使能GPIOA
    RCC_APB2PeriphClockCmd(RCC_APB2periph_GPIOA,ENABLE);

    //定义结构体
    GPIO_InitTypeDef GPIO_InitStructure;

    //初始化结构体
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_OUT_PP;    //选择推挽输出-GPIO_Mode_Out_PP
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_0;          //选择GPIOA的Pin0口
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHZ;    //选择50MHZ速度

    //初始化外设
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    
}

4.GPIO的位结构

(1).施密特触发器:将变化缓慢的输入信号整形成边沿陡峭的矩形脉冲。

(2).输出控制有开漏输出,推挽输出。在推挽输出下,高低电平都有驱动能力,在开漏输出下,只有低电平有驱动能力。

(3)

输入模式:及读取端口的高低电平。

输出模式:控制端口的高低电平。

5.GPIO的输入输出模式

输入模式:

浮空输入数字输入可读取引脚电平。若引脚悬空,则电平不确定
上拉输入数字输入可读取引脚电平,内部连接上拉电阻,悬空默认高电平(弱上拉)
下拉输入数字输入可读取引脚电平,内部连接下拉电阻,悬空默认低电平(弱下拉)
模拟输入模拟输入GPIO口无效,引脚直接接入内部ADC

输出模式:

开漏输出数字输出可输出引脚电平,高电平为高阻态,低电平接VSS(低电平有驱动能力,高电平无)
推挽输出数字输出可输出引脚电平,高电平接VDD,低电平接VSS(高低电平都有驱动能力)
复用开漏输出数字输出由片上外设控制,高电平为高阻态,低电平接VSS(低电平有驱动,高电平无)
复用推挽输出数字输出由片上外设控制,高电平接VDD,低电平接VSS(高低电平都有驱动能力)

注:

(1).在输出模式下,只有配置或复用模式才可以将GPIO空的输出交给片上外设。

(2).模拟输入是ADC的专属模式。

(3)浮空输入一般不用,除非上拉输出和下拉输出对端口的影响很大。

6.GPIO相关函数

6.1.1 void GPIO_DeInit(GPIO_TypeDef* GPIOx);

作用:调用该函数所指定的GPIO外设会被复位。


6.1.2 void GPIO_AFIODeInit(void);

作用:调用该函数,AFIO会被复位。


6.1.3 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

作用:用结构体的参数来初始化GPIO口。


6.1.4 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

作用:可把结构体变量赋值一个默认值

6.1.5 GPIO口的读取函数(输入模式相关)


uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取输入寄存器的一位


uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

作用:读取输入寄存器的全部


uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:读取输出寄存器的一位


uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

作用:读取输出寄存器的全部

6.1.6GPIO的写入函数(输出模式相关)


void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:在GPIOx的GPIO_Pin_x上写下1


void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:在GPIOx的GPIO_Pin_x上写下0


void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

作用:在GPIOx的GPIO_Pin_x上写下0或1,其中Bit_RESET为0,Bit_SET为1


void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

作用:在GPIOx的全部16口写入1或0


6.1.7void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

作用:用来锁定GPIO配置,防止意外更改

6.1.8 GPIO关于AFIO的事件输出函数
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);


void GPIO_EventOutputCmd(FunctionalState NewState);


void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);

作用:用来进行引脚重映射。第一个参数选择要重映射的方式,第二个参数是新的状态。


void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);

作用:该函数可以配置AFIO的数据选择器,来选择我们想要的中断引脚(用于EXTI外部中断)


void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

作用:于以太网有关

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值