目录
//先了解下各英文缩写的意思:
R:Register 寄存器
I:Input 输入
O:Output 输出
D:Data 数据
P:Pull 拉
U:Up 上
D:Down 下
B:Bit 位
S:Set 置位
R:Reset 复位
C:Configuration 配置
L:Lock 锁
L:Low 低
H:High 高
MODE:模式
TYPE:类型
SPEED:速度
AF:Alternate function 复用功能
三、GPIO的工作模式以及寄存器配置
每个GPIO都包括了11个寄存器来配置具体功能。每个引脚功能都是完全可以独立配置的,互不影响。
打开《STM32G4系列微控制器参考手册.pdf》,9.4节详细说明了GPIO的11个寄存器。
GPIOx_MODER 端口模式寄存器
GPIOx_OTYPER 端口输出类型寄存器
GPIOx_OSPEEDR 端口输出速度寄存器
GPIOx_PUPDR 端口上拉/下拉寄存器
GPIOx_IDR 端口输入数据寄存器
GPIOx_ODR 端口输出数据寄存器
GPIOx_BSRR 端口置位/复位寄存器
GPIOx_LCKR 端口配置锁定寄存器
GPIOx_AFRL 复用功能低位寄存器
GPIOx_AFRH 复用功能高位寄存器
GPIOx_BRR 端口位复位寄存器
GPIO有8种工作模式,如表1所示:
模式配置 | 模式寄存器 MODER位[1:0] | 输出类型寄存器 OTYPER位 | 输出速度寄存器 OSPEEDR位[1:0] | 上拉/下拉寄存器 PUPDR位[1:0] | |
---|---|---|---|---|---|
输 入 | 输入浮空(默认) | 00 | 不使用 | 不使用 | 00 |
输入上拉 | 00 | 01 | |||
输入下拉 | 00 | 10 | |||
模拟输入 | 11 | 00 | |||
输 出 | 开漏通用输出 | 01 | 1 | 00 低速2MHz 01 中速25MHz 10 高速50MHz 11 超高速100MHz | 00 无上下拉 01 上拉 10 下拉 11 保留 |
推挽通用输出 | 01 | 0 | |||
开漏复用功能输出 | 10 | 1 | |||
推挽复用功能输出 | 10 | 0 |
表1 GPIO的8种工作模式
1. GPIO工作模式
1.1 输入模式
(一) 浮空输入模式
浮空:既不接电源,也不接地。
浮空输入模式下不使用上拉/下拉电阻。当外接设备有上拉或下拉电阻时,可以配置成浮空输入模式。
(二) 输入上拉模式
输入上拉模式使用到了上拉电阻。
(三) 输入下拉模式
输入下拉模式使用到了下拉电阻。
(四) 高组态模拟输入模式
同样不使用上拉/下拉电阻。
1.2 输出模式
在输出模式下TTL施密特触发器为开启状态,所以输出模式下仍存在输入。
- 通用:作普通IO使用,输出0、1。
- 复用:
(五) 开漏通用输出模式
场效应管:
“漏” 就是指MOS管的漏极Drain。开漏:开启漏极,就是指以MOS管的 漏极 为输出。
开漏不使用 P-MOS ,故输出不为 “0” 或 “1”,而是 “0” 或 “浮空”。
- 写0传输到MOS管处,N-MOS 导通,输出为0;
- 写1传输到MOS管处,P-MOS 和 N-MOS 都不导通,输出浮空。
开漏通用输出为不确定状态,不具有驱动能力。
(六) 推挽通用输出模式
推挽使用 P-MOS 和 N-MOS ,输出为 “0” 或 “1(系统电压3.3V)”。
推挽通用输出能够输出高电平(系统电压3.3V),具有一定的驱动能力, 可接简单外设(例如LED)。
(七) 开漏复用功能输出模式
(八) 推挽复用功能输出模式
2. 工作模式下的寄存器配置
2.1 输入模式
(一) 浮空输入配置
模式寄存器MODER位[1:0]=00 //00: Input mode输入模式
输出类型寄存器OTYPER位不使用
输出速度寄存器OSPEEDR位[1:0]不使用
上拉/下拉寄存器PUPDR位[1:0]=00 //00: No pull-up, pull-down无上拉,下拉
(二) 输入上拉配置
模式寄存器MODER位[1:0]=00 //00: Input mode输入模式
输出类型寄存器OTYPER位不使用
输出速度寄存器OSPEEDR位[1:0]不使用
上拉/下拉寄存器PUPDR位[1:0]=01 //01: Pull-up上拉
(三) 输入下拉配置
模式寄存器MODER位[1:0]=00 //00: Input mode输入模式
输出类型寄存器OTYPER位不使用
输出速度寄存器OSPEEDR位[1:0]不使用
上拉/下拉寄存器PUPDR位[1:0]=10 //10: Pull-down下拉
(四) 高组态模拟输入配置
模式寄存器MODER位[1:0]=11 //11: Analog mode (reset state)模拟模式
输出类型寄存器OTYPER位不使用
输出速度寄存器OSPEEDR位[1:0]不使用
上拉/下拉寄存器PUPDR位[1:0]=00 //00: No pull-up, pull-down无上拉,下拉
2.2 输出模式
(五) 开漏通用输出配置
模式寄存器MODER位[1:0]=01 //01: General purpose output mode通用输出模式
输出类型寄存器OTYPER位=1 //1: Output open-drain输出开漏
输出速度寄存器OSPEEDR位[1:0]=00~11 //00~11都可,四种速度依实际情况而定
上拉/下拉寄存器PUPDR位[1:0]=00~11 //00~11都可,一般情况下输出不加上/下拉电阻,即为00
(六) 推挽通用输出配置
模式寄存器MODER位[1:0]=01 //01: General purpose output mode通用输出模式
输出类型寄存器OTYPER位=0 //0: Output push-pull (reset state)输出推挽
输出速度寄存器OSPEEDR位[1:0]=00~11 //00~11都可,四种速度依实际情况而定
上拉/下拉寄存器PUPDR位[1:0]=00~11 //00~11都可,一般情况下输出不加上/下拉电阻,即为00
(七) 开漏复用功能输出配置
模式寄存器MODER位[1:0]=10 //10: Alternate function mode复用功能模式
输出类型寄存器OTYPER位=1 //1: Output open-drain输出开漏
输出速度寄存器OSPEEDR位[1:0]=00~11 //00~11都可,四种速度依实际情况而定
上拉/下拉寄存器PUPDR位[1:0]=00~11 //00~11都可,一般情况下输出不加上/下拉电阻,即为00
(八) 推挽复用功能输出配置
模式寄存器MODER位[1:0]=10 //10: Alternate function mode复用功能模式
输出类型寄存器OTYPER位=0 //0: Output push-pull (reset state)输出推挽
输出速度寄存器OSPEEDR位[1:0]=00~11 //00~11都可,四种速度依实际情况而定
上拉/下拉寄存器PUPDR位[1:0]=00~11 //00~11都可,一般情况下输出不加上/下拉电阻,即为00
3. 其他寄存器配置
上面说到了模式寄存器、输出类型寄存器、输出速度寄存器、上拉/下拉寄存器。另外还有7个寄存器,接下来逐个分析。
GPIOx_IDR 端口输入数据寄存器
输入1则 ID[15:0] 就是1,输入0则 ID[15:0] 就是0。
GPIOx_ODR 端口输出数据寄存器
GPIOx_ODR 中的内容来自 GPIOx_BSRR 。(映射)
输出1则 OD[15:0] 就是1,输出0则 OD[15:0] 就是0。
GPIOx_BSRR 端口置位/复位寄存器
Bit 31:16 复位 BR[15:0]
- 0:对相应的ODx位不执行任何操作
- 1:复位相应的ODx位(0)
Bit 15: 0 置位 BS[15:0]
- 0:对相应的ODx位不执行任何操作
- 1:置位相应的ODx位(1)
注意:如果同时设置了BSx和BRx,则BSx具有优先级。
GPIOx_BSRR将内容映射到GPIOx_ODR中。
GPIOx_LCKR 端口配置锁定寄存器
Bit 31:17,必须保持在重置值。
第16位LCKK:锁定钥匙。此位可随时读取。只能使用锁止键写入顺序对其进行修改。
- 0:端口配置锁定密钥未激活
- 1:端口配置锁定键激活。GPIOx_LCKR寄存器被锁定,直到下一个MCU复位或外围设备复位。
锁定键写入顺序:
- WR LCKR[16]=“1”+LCKR[15:0]
- WR LCKR[16]=“0”+LCKR[15:0]
- WR LCKR[16]=“1”+LCKR[15:0]
- RD LCKR
- RD LCKR[16]=“1”(此读取操作是可选的,但它确认锁处于活动状态)
注意:
- 在锁定键写入序列期间,LCK[15:0] 的值不得改变。
- 锁定序列中的任何错误都会中止锁定。
- 在端口任何位上的第一个锁序列之后,LCKK位上的任何读取访问返回 “1” ,直到下一次MCU重置或外围设备重置。
Bit 15:0 LCK[15:0]:端口x锁I/O引脚y(y=15到0)这些位是读/写的,但仅当LCKK位为 “0” 时才能写入。
- 0:端口配置未锁定
- 1:端口配置已锁定
GPIOx_AFRL 复用功能低位寄存器
GPIOx_AFRH 复用功能高位寄存器
以上两个寄存器可以回看关于GPIO知识的第一篇。
GPIOx_BRR 端口位复位寄存器
- 0:对相应的ODx位不执行任何操作
- 1:重置相应的ODx位
以上就是对GPIO工作模式的介绍以及相应工作模式下各个寄存器的配置。
STM32F103的GPIO也可通过查看参考手册来了解,学习方法都是相同的。
GPIO介绍完了,下一章就要开始用GPIO来操作外设了,比如控制LED。