STM32GPIO输入输出模式,配置简述

实验室第二次博客作业。

本文指的是STM32的GPIO。

GPIO定义

GPIO英文General-Purpose Input /Output Ports是STM32的通用引脚,工程师们一般通过对GPIO的引脚进行操作比如配置来“玩”单片机。

GPIO的基本结构:

 

GPIO的8种输入输出模式

STM32的GPIO支持4种输入模式(浮空输入、上拉输入、下拉输入、模拟输入)和4种输出模式(开漏输出、开漏复用输出、推挽输出、推挽复用输出)。同时,GPIO还支持三种最大翻转速度(2MHz、10MHz、50MHz)。

代码模式
GPIO_Mode_IPU上拉输入
GPIO_Mode_AIN模拟输入
GPIO_Mode_IN_FLOATING浮空输入
GPIO_Mode_IPD下拉输入
GPIO_Mode_Out_OD开漏输出
GPIO_Mode_Out_PP 推挽输出
GPIO_Mode_AF_OD 复用开漏输出
GPIO_Mode_AF_PP 复用推挽输出

下面详细介绍这八种输入输出模式:

上拉输入模式

上拉输入模式下输入引脚数据为1,高电平。VDD导通(上拉电阻导通),VSS断开(下拉电阻断路)

上拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空的情况下,输入端的电平保持在高电平;并且在I/O端口输入为低电平的时候,输入端的电平也是低电平。

下拉输入模式

下拉输入模式下输入引脚为0,低电平。VDD断开(上拉电阻断路),VSS导通(下拉电阻导通)

下拉输入模式下,I/O端口的电平信号直接进入输入数据寄存器。但是在I/O端口悬空的情况下,输入端的电平保持在低电平;并且在I/O端口输入为高电平的时候,输入端的电平也是高电平。

浮空输入模式

浮空输入模式下,VDD和VSS均断开,I/O端口的电平信号直接进入输入数据寄存器。也就是说,I/O的电平状态是不确定的,完全由外部输入决定;如果在该引脚悬空(在无信号输入)的情况下,读取该端口的电平是不确定的。

这种配置一般不用(比较危险),初学者里IIC、USART用的挺多

模拟输入模式

模拟输入模式下,I/O端口的模拟信号(电压信号,而非电平信号)直接模拟输入到片上外设模块,这种ADC模块用的比较多

开漏输出模式

开漏输出模式下,通过设置位设置/清除寄存器或者输出数据寄存器的值,途经N-MOS管,最终输出到I/O端口。而当设置输出的值为高电平的时候,N-MOS管处于关闭状态,此时I/O端口的电平就不由输出的高低电平决定而由I/O端口外部的上拉或者下拉决定;当设置输出的值为低电平的时候,N-MOS管处于开启状态,此时I/O端口的电平为低电平。同时,I/O端口的电平也可以通过输入电路进行读取。


开漏输出模式下可以输出0和1,适用于电平的不匹配场合。

开漏复用输出模式

开漏复用输出模式只输出的高低电平的来源不让CPU直接写输出数据寄存器,而这是利用片上外设模块的复用功能输出来决定。

推挽输出模式(这种模式非常常用)

推挽输出模式下(P-MOS管+N-MOS管),通过设置位设置/清除寄存器或者输出数据寄存器的值,途经P-MOS管和N-MOS管,最终输出到I/O端口。同时,I/O端口的电平也可以通过输入电路进行读取;此时I/O端口的电平一定是输出的电平。

可以输出高低电平0和1,适用于双向IO的使用。

推挽复用输出模式

推挽复用输出模式,与推挽输出模式类似。只是输出的高低电平的来源,而不是让CPU直接写输出数据寄存器,而这是利用片上外设模块的复用功能输出来决定的。


GPIO的配置方法(库函数版本)

要使用GPIO,则需要对其进行配置,配置步骤如下:

配置时钟并使能,选择引脚,配置引脚模式和引脚翻转速度,最后调用库函数初始化GPIO

对于初学者来说,时钟配置就是不断在library和函数里复制搬运,CtrlC+V;

时钟使能函数

RCC_APBXPeriphClockCmd()这个函数叫做使能或失能APBX外设时钟,在library复制来之后直接用就行。括号里面就是使能的外设时钟。

时钟配置之后,选择一下你要使用的管脚,多个管脚可以用或符号(“  |  ")隔开。

一般来说用先定义一个结构体,初学者可能会觉得就配置个函数过程也太复杂了。的确,可能开始感觉太过繁琐,但到后面配置AFIO等复杂的时候将会体会到好处,这也是标准化的体现

/*选择要控制的GPIOX引脚*/
GPIO_InitStructure.GPIO_Pin = GPIO_PIN_n;

配置引脚模式:

用到这个函数
GPIO_InitStructure.GPIO_Mode
/*e.g:设置引脚模式为通用推挽输出*/
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

配置输入输出模式有下面几点值得注意:

作为普通GPIO输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时不要使能该引脚对应的所有复用功能模块。

作为普通GPIO输出:根据需要配置该引脚为推挽输出或开漏输出,同时不要使能该引脚对应的所有复用功能模块。

作为普通模拟输入:配置该引脚为模拟输入模式,同时不要使能该引脚对应的所有复用功能模块。

作为内置外设的输入:根据需要配置该引脚为浮空输入、带弱上拉输入或带弱下拉输入,同时使能该引脚对应的某个复用功能模块。

设置引脚翻转速度:

用到这个函数
GPIO_InitStructure.GPIO_Speed;
/*e.g:设置引脚速率为50MHz */
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

调用通用的库函数

调用通用的库函数,将上面的配置写入芯片,初始化GPIO(这个Init类型的函数在后面将会十分常见);

用到这个函数
GPIO_Init
/*e.g:调用库函数,初始化GPIOA*/
GPIO_Init(GPIOA, &GPIO_InitStructure);

到此为止,都属于GPIO配置函数里面的内容,配置完GPIO,就可以让他输出高低电平了。

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值