GPIO工作模式
输入
注意:输入模式没有推挽或开漏和速度设置。
模拟输入:GPIO_Mode_AN 外界模拟量,不加干涉(GPIO无效即使配置上下拉也无效),采集信息(电平信号1,0连续变化),模数转换(引脚直接接入内部ADC)。
上拉输入:GPIO_PuPd_UP 悬空无输入信号时,默认为高电平。有输入信号时,输入高为高电平,输入低为低电平。
下拉输入:GPIO_PuPd_DOWN 悬空无输入信号时,默认为低电平。有输入信号时,输入高为高电平,输入低为低电平。
浮空输入:GPIO_PuPd_NOPULL既不上拉又不下拉,由输入电平信号决定,可能受环境影响(环境,灰尘,电磁,静电)导致电平信号忽高忽低(用得少,有弊端)
输出
推挽模式:GPIO_OType_PP增大输出电流,高电平P-MOS导通,N-MOS断开。低电平N-MOS导通,P-MOS断开。(带上拉或者下拉)
开漏模式:GPIO_OType_OD高电平没有驱动力,需要外部上拉电阻才能真的输出高电平。(带上拉或者下拉)
这一特性一个明显的优势就是可以很方便的调节输出的电平,因为输出电平完全由上拉电阻连接的电源电平决定。所以在需要进行电平转换的地方,非常适合使用开漏输出。
开漏输出的另一特性好处在于可以实现"线与"功能,所谓的"线与"指的是多个信号线直接连接在一起,只有当所有信号全部为高电平时,合在一起的总线为高电平;只要有任意一个或者多个信号为低电平,则总线为低电平。而推挽输出就不行
开漏输出常用在通信接口,有多个设备连接在同一线上(例如 I2C、One-Wire)。线路默认被上拉电阻拉至高电平,当任意设备有信号触发时,就会将整条线电平拉低。
开漏输出和推挽输出的区别最普遍的说法就是开漏输出无法真正输出高电平,即高电平时没有驱动能力,需要借助外部上拉电阻完成对外驱动。
复用推挽:GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)
复用开漏:GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
如果四种模式则为:输入、输出、复用、模拟。

每个引脚内部都有上拉电阻和下拉电阻,但是上拉电阻是一个弱上拉(驱动能力较弱),如果想要提供给引脚一个确定的电平,建议外接上拉电阻。


PMOS管和NMOS管循环依次导通,好处是可以提高电路的负载能力和切换速度,并且可以降低功耗。
//stm32给予的部分权利截取自stm32f4xx_gpio.h
//uint8_t 无符号整型八位
//读取 输入 数据 哪一位
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);
//使能,电信号1
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//失能,电信号0
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//翻转(翻转高低电平信号)
void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
STM32F407ZGT6有8组I/O。分别为GPIOA ~ GPIOH,除了GPIOH只有两个I/O,其余每组I/O有16(0~15)根引脚。
下图中干扰项会对配置产生影响吗?
答:不影响,前面配置中已经有了稳定的输出源
void LED_Init()
{
GPIO_InitTypeDef GPIO_InitStructure; //结构体初始化
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); //开启时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10; //led引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; //输出
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; //推挽
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; //速度(不考虑功耗选最大)
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; //干扰项
GPIO_Init(GPIOF, &GPIO_InitStructure); //初始化
GPIO_SetBits(GPIOF,GPIO_Pin_9); //默认关(原理图中使能)
GPIO_SetBits(GPIOF,GPIO_Pin_10); //默认关
}
- 引脚的说明

电源引脚 :VCC、VDD、VSS、VDDA、VSSA、VREF+等属于电源引脚
晶振引脚 :PC14、PC15、PH0、PH1就属于晶振引脚,也可以作为其他的功能使用
复位引脚 :NRST属于复位引脚
BOOT引脚 :BOOT0是专用引脚,BOOT1就属于功能引脚 (设置芯片的自举模式)
GPIO引脚 :芯片一共有144引脚,但是GPIO引脚有114个
下载引脚 :PA13、PA14、PB3、PB4等都属于下载引脚(JTAG、SWD)
1288

被折叠的 条评论
为什么被折叠?



