图片来自 成电应电科协
一. GPIO定义
GPIO是通用输入/输出(General Purpose l/O)的简称,主要用于工业现场需要用到数字量输入/输出的场合,例如:
- 输出功能:继电器、LED、蜂鸣器等的控制
- 输入功能:传感器状态、高低电平等信息的读取
- 复用功能:片内外设的对外接口
- 时序模拟:模拟SPI、12C和UART等常用接口的时序
二. GPIO的特性
- 多种工作模式: 输出/输入/复用/模拟
- 灵活的复用模式
- 5V电压容限
- 外部中断功能
三. 端口和引脚
两个概念
端口(PORT)
独立的外设子模块,包括多个引脚,通过多个硬件寄存器控制引脚GPIO模块由端口GPIOA、GPIOB、GPIOC等多个独立的子模块构成 例如:端口GPIOA包括PAO~PA15这16个引脚,通过10个硬件寄存器控制引脚工作
引脚(PIN)
对应微控制器的一个管脚,归属于端口,由端口寄存器的对应位控制 PAO对应STM32F411RET6芯片的14脚,属于端口GPIOA,输出电平由端口GPIOA的输出数据寄存器GPIOA_ODR的第0位决定 总结:一个端口默认包含16个引脚,但是不同型号的STM32微控制器所包含的端口数量及各端口包含的引脚数量各不相同,具体信息可以查询芯片的数据手册
四. GPIO模块的电路结构
五. GPIO工作模式
1. GPIO工作模式——输入模式
①输出驱动器关闭
②施密特触发器打开,
③可以获取引脚状态通过寄存器使能上/下拉电阻:浮空/上拉/下拉输入
④引脚电平状态将存入输入数据寄存器
2. GPIO工作模式——输出模式
①输出驱动器打开
②施密特触发器打开
③通过寄存器使能上拉/下拉电阻
④通过输入数据寄存器获取引脚状态
GPIO工作模式——输出模式——推挽输出
GPIO工作模式——输出模式——开漏输出
3. GPIO工作模式——模拟模式
4. GPIO工作模式——复用模式
①输出驱动器打开
②施密特触发器打开
③通过寄存器使能上拉/下拉电阻
④通过输入数据寄存器获取引脚状态
六. 端口寄存器
每一个端口都包括这10个寄存器,其中x表示端口号,取值从A~K
模式寄存器GPIOx_MODER
输出类型寄存器GPIOx_OTYPER
输出速度寄存器GPIOx_OSPEEDR
上拉/下拉寄存器GPIOx_PUPDR
输入数据寄存器GPIOx_IDR
输出数据寄存器GPIOx_ODR
注意事项: 输出数据寄存器GPIOx_ODR
- 设置某一个引脚的输出电平时,只修改该引脚对应的位,而不要修改其他的位
- 设置输出数据寄存器的某一个位为1,并不代表该位对应的引脚一定输出高电平。 有可能该引脚在外围电路的作用下拉到了低电平。 因此应该通过读取输入数据寄存器GPIOx_IDR来获取引脚的真实电平情况
置位/复位寄存器GPIOx_BSRR
使用举例
结论: 设置多个引脚输出高/低电平时,使用置位/复位寄存器更加简单
七. 利用指针访问单个寄存器
寄存器地址
地址转换方法
地址转换过程
指针基类型
演示例程
驱动指示灯
- 例程目标
基于寄存器的程序开发方式 - 例程内容
控制开发板的用户指示灯LD2连续闪烁
新建工程
注: 选择自己使用的芯片型号
编程代码
程序编译,下载
八. 利用结构体指针访问寄存器组
寄存器组
tepedef 定义别名
__IO | unint32_t | GPIO_TypeDef |
---|
更能突出变量的硬件特性 | 更能表明数据类型所占的位数 | 代替结构体模板 |
区别
寄存器组定义
芯片头文件
编程代码
GPIOx->BSRR|=1<<5; // 01 左移 5 位,即低16位控制对应5引脚写入1;此次操作实现配置端口5输出高电平
GPIOC->MODER|=1<<(5*2); // 01 左移 5 * 2=10位,即配置位11、10置为01;此次操作实现配置端口5为输出模式
while(delay–) //就是Delay 这个数不断的递减。当Delay==0 时,循环结束。
简化寄存器配置过程
|