整理:小嵌儿
出品:嵌入式协会
本文通过寄存器开发方式控制stm32F103上的2个LED(连接PB5和PE5)交替闪烁。通过本文的学习,你将初步掌握stm32基本I/O输出方式的使用,而这也是迈向stm32的第一步。
stm32 GPIO的八种工作模式
一、模式介绍
1、四种输入模式:
(1)GPIO_Mode_AIN 模拟输入 (Analog Input)
(2)GPIO_Mode_IN_FLOATING 浮空输入 (Floating Input)
(3)GPIO_Mode_IPD 下拉输入 (Input Pull-down)
(4)GPIO_Mode_IPU 上拉输入 (Input Pull-up)
2、 四种输出模式:
(5)GPIO_Mode_Out_OD 开漏输出 (Open Drain Output)
(6)GPIO_Mode_Out_PP 推挽式输出 (Push-Pull Output)
(7)GPIO_Mode_AF_OD 开漏复用功能 (Open Drain Alternate Function)
(8)GPIO_Mode_AF_PP 推挽式复用功能 (Push-Pull Alternate Function)
二、模式框图
保护二极管:IO引脚上下两边两个二极管用于防止引脚外部过高、过低的电压输入。
当引脚电压高于VDD时,上方的二极管导通;当引脚电压低于VSS时,下方的二极管导通,防止不正常电压引入芯片导致芯片烧毁。也叫钳位二极管。
P-MOS管和N-MOS管:
由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”(两个管子同时使用)和“开漏输出”(只使用一个管子)的模式。
TTL肖特基触发器:
信号经过触发器后,模拟信号转化为0和1的数字信号。但是,当GPIO引脚作为ADC采集电压的输入通道时,用其“模拟输入”功能,此时信号不再经过施密特触发器进行TTL电平转换。(可以理解为一个比较器,大于某个值是1,小于某个值是0)
三、模式解析
1、模拟输入(Analog Input)
模拟输入,即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻)。通常是用于ADC采集电压输入通道,进行AD转换。此模式可以检测外部输入的模拟电压,可以检测电压值,只要不高于VCC即可。
2、浮空输入 (Floating Input)
浮空输入。浮空输入状态下,I/O的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。
通常该模式用于接一些传感器的信号端或者按键检测等外设,通过读取外部信号的电平变化确定该状态,但容易被干扰。
3、下拉输入 (Input Pull-down)
下拉输入,单片机内部接下拉电阻,作用就是把默认电压拉成低电平 ,相当于单片机上电后在该模式下默认GPIO引脚为低电平。可以检测到由低到高的电平变化,当外部输入一个高电平时,该引脚也会变成高电平。
下拉模式的应用场景包括:
-
按键输入:当按键未按下时,输入引脚被下拉到低电平;按下按键时,引脚被拉到高电平。
-
某些传感器或外部设备:需要一个默认低电平状态来稳定信号输入。
-
减少电磁干扰:通过将输入引脚接地,可以降低外界干扰的影响。
4、上拉输入 (Input Pull-up)
上拉输入,单片机内部接上拉电阻,作用就是把默认电压拉高 ,相当于单片机上电后在该模式下默认GPIO引脚为高电平。可以检测到由高到低的电平变化,当外部输入一个低电平时,该引脚也会变成低电平。
上拉模式的具体应用场景包括:
-
读取外部信号:在上拉模式下,当外部信号不确定时,通过上拉电阻将电平钳位在高电平,方便单片机读取外部信号的电平变化。
-
减少干扰:上拉电阻可以起到限流作用,防止外部信号直接连接到单片机引脚,减少干扰和保护单片机。
-
默认高电平:在没有外部信号输入时,上拉输入模式下,GPIO引脚默认会输入一个高电平,适用于需要高电平启动的设备或电路。