1. GPIO简介
- General Purpose Input Output,即通用输入输出端口,简称GPIO
- 作用:负责采集外部器件的信息或者控制外部器件工作,即输入输出
2. STM32 GPIO简介
2.1 GPIO特点
- 不同型号,IO口数量可能不一样,需要通过选型手册快速查询
- 快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz)
- 每个IO口都可以做中断
- 支持8种工作模式
2.2 GPIO电器特性
- STM32工作电压范围:2 V ≤ VDD ≤ 3.6 V
- GPIO识别电压范围:COMS端口:-0.3V ≤ VIL ≤ 1.164V; 1.833V ≤ VIH ≤ 3.6V
- GPIO输出电流:单个IO,最大25mA
2.3 GPIO引脚分布
STM32引脚类型:
电源引脚、晶振引脚、复位引脚、下载引脚、BOOT引脚、GPIO引脚
IO引脚分布特点:按组存在、组数视芯片而定、每组最多16个IO引脚
3. IO端口基本结构介绍
F1的IO结构图:
F4/F7/H7的IO结构图:
下面以F1型号为例具体讲解:
3.1 施密特触发器
施密特触发器就是一种整形电路,可以将非标准方波,整形成方波
特点:
- 当输入电压高于正向阈值电压,输出为高;
- 当输入电压低于负向阈值电压,输出为低;
- 当输入在正负向阈值电压之间,输出不改变
3.2 P-MOS & N-MOS管
MOS管是压控型元件,通过控制栅源电压( Vgs )来实现导通或关闭
4. GPIO的八种模式(重要)
4.1 输入浮空
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器打开
- 双MOS管不导通
特点: 空闲时,IO状态不确定,由外部环境决定
4.2 输入上拉
- 上拉电阻打开
- 下拉电阻关闭
- 施密特触发器打开
- 双MOS管不导通
特点: 空闲时,IO呈现高电平
4.3 输入下拉
- 上拉电阻关闭
- 下拉电阻打开
- 施密特触发器打开
- 双MOS管不导通
特点: 空闲时,IO呈现低电平
4.4 模拟功能
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器关闭
- 双MOS管不导通
特点: 专门用于模拟信号输入或输出,如:ADC和DAC
4.5 开漏输出
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器打开
- P-MOS管始终不导通
- 往ODR对应位写0,N-MOS管导通,写1则N-MOS管不导通
特点: 不能输出高电平,必须有外部(或内部)上拉才能输出高电平
4.6 开漏式复用功能
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器打开
- P-MOS管始终不导通
特点:
1、不能输出高电平,必须有外部(或内部)上拉才能输出高电平
2、由其他外设控制输出
4.7 推挽输出
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器打开
- 往ODR对应位写0,N-MOS管导通,写1则P-MOS管导通
特点: 可输出高低电平,驱动能力强
4.8 推挽式复用功能
- 上拉电阻关闭
- 下拉电阻关闭
- 施密特触发器打开
特点:
1、可输出高低电平,驱动能力强
2、由其他外设控制输出
4.9 F4/F7/H7系列和F1系列的GPIO差异点
- F1在输出模式,禁止使用内部上下拉F4/F7/H7在输出模式,可以使用内部上下拉
- 不同系列IO翻转速度可能不同
5. GPIO寄存器介绍
5.1 端口配置低寄存器(CRL)- F1
设置工作模式、输出速度
5.2 端口配置高寄存器(CRH)- F1
5.3 工作模式配置补充 – F1
输入上拉/下拉电阻通过ODR寄存器来设置
5.4 端口输入数据寄存器(IDR)– F1
用于判断IO引脚的电平
5.5 端口输出数据寄存器(ODR)– F1
用于设置IO引脚输出的电平
5.6 端口位设置/清除寄存器(BSRR)– F1
用于设置ODR寄存器
6. 通用外设驱动模型(四步法)
- 初始化 :时钟设置、参数设置、IO设置、中断设置(开中断、设NVIC)
- 读函数(可选):从外设读取数据(可选)
- 写函数(可选):往外设写入数据(可选)
- 中断服务函数(可选):根据中断标志,处理外设各种中断事务(可选)
7. GPIO配置步骤
- 使能时钟 :
__HAL_RCC_GPIOx_CLK_ENABLE()
- 设置工作模式:
HAL_GPIO_Init()
- 设置输出状态(可选):
HAL_GPIO_WritePin() 、HAL_GPIO_TogglePin()
- 读取输入状态(可选):
HAL_GPIO_ReadPin()
相关HAL库函数简介
评论区