STM32 的 IO 口相比51而言要复杂得多,每个 IO 端口都有 7 个寄存器来控制。他们分别是:
2个32位配置寄存器,GPIOx_CRL、GPIOx_CRH
2个32位数据寄存器,GPIOx_IDR、GPIOx_ODR
1个32位置位/复位寄存器,GPIOx_BSRR
1个16位复位寄存器,GPIOx_BRR
1个32位锁存寄存器,GPIOx_LCKR
每个通用 IO(GPIO)端口的端口位,可由软件单独配置为以下8种模式:1、输入浮空,2、输入上拉,3、输入下拉,4、模拟输入,5、开漏输出,6、推挽输出,7、推挽式复用功能,8、开漏复用功能
每个 IO 口可以*编程, 但 IO 口寄存器必须要按 32 位字被访问。
目录
1、GPIO的寄存器
寄存器相关的介绍在文件RM0008-Reference manual 中,该文件的下载地址如下:
1、GPIOx_CRL
Bits 31:30、27:26、23:22、19:18、15:14、11:10、7:6、3:2
These bits are written by software to configure the corresponding I/O port. 这些为可以通过软件编写来控制相应的 I/O 口
CNFy[1:0]:Port x configuration bits (y = 0 .. 7) 端口配置位
输入模式下:(MODE[1:0] = 00)
00:Analog mode 模拟输入模式
01:Floating input (reset state) 浮空输入模式(复位后的状态)
10:Input with pull-up / pull-down 上拉/下拉输入模式
11:Reserved 保留
输出模式下:(MODE[1:0] > 00)
00: General purpose output push-pull 通用推挽输出模式
01:General purpose output Open-drain 通用开漏输出模式
10:Alternate function output Push-pull 复用功能推挽输出模式
11:Alternate function output Open-drain 复用功能开漏输出模式
Bits 29:28、25:24、21:20、17:16、13:12、9:8、5:4、1:0
These bits are written by software to configure the corresponding I/O port. 这些为可以通过软件编写来控制相应的 I/O 口
MODEy[1:0]: Port x mode bits (y = 0 .. 7) 端口配置位
00: Input mode (reset state) 输入模式(复位后的状态)
01:Output mode, max speed 10 MHz 输出模式,最高速率10MHz
10:Output mode, max speed 2 MHz 输出模式,最高速率2MHz
11:Output mode, max speed 50 MHz 输出模式,最高速率50MHz
2、GPIOx_CRH
Bits 31:30、27:26、23:22、19:18、15:14、11:10、7:6、3:2
These bits are written by software to configure the corresponding I/O port. 这些为可以通过软件编写来控制相应的 I/O 口
CNFy[1:0]:Port x configuration bits (y = 8 .. 15) 端口配置位
输入模式下:(MODE[1:0] = 00)
00:Analog mode 模拟输入模式
01:Floating input (reset state) 浮空输入模式(复位后的状态)
10:Input with pull-up / pull-down 上拉/下拉输入模式
11:Reserved 保留
输出模式下:(MODE[1:0] > 00)
00: General purpose output push-pull 通用推挽输出模式
01:General purpose output Open-drain 通用开漏输出模式
10:Alternate function output Push-pull 复用功能推挽输出模式
11:Alternate function output Open-drain 复用功能开漏输出模式
Bits 29:28、25:24、21:20、17:16、13:12、9:8、5:4、1:0
These bits are written by software to configure the corresponding I/O port. 这些为可以通过软件编写来控制相应的 I/O 口
MODEy[1:0]: Port x mode bits (y = 8 .. 15) 端口配置位
00: Input mode (reset state) 输入模式(复位后的状态)
01:Output mode, max speed 10 MHz 输出模式,最高速率10MHz
10:Output mode, max speed 2 MHz 输出模式,最高速率2MHz
11:Output mode, max speed 50 MHz 输出模式,最高速率50MHz
3、GPIOx_IDR
These bits are read only and can be accessed in Word mode only. They contain the input value of the corresponding I/O port.
GPIOx_IDR为输入状态寄存器,该寄存器为只读寄存器,并且只能以16 位的形式读出。
Bits 15:0 IDRy: Port input data (y= 0 .. 15) 读取的值对应 IO 口的状态
4、GPIOx_ODR
These bits can be read and written by software and can be accessed in Word mode only.
GPIOx_ODR为输出状态寄存器,该寄存器可读可写,但只能以16 位的形式读写。
Note: For atomic bit set/reset, the ODR bits can be individually set and cleared by writing to the GPIOx_BSRR register (x = A .. G).
注意:ODR位可以通过设置GPIOx_BSRR寄存器来实现置位或者复位
Bits 15:0 ODRy: Port output data (y= 0 .. 15)
5、GPIOx_BSRR
对输出端口进行置位/复位的寄存器,可以用来设置 GPIO 端口的输出位是 0 还是 1。
Bits 31:16 BRy:Port x Reset bit y (y = 0 .. 15)
These bits are write-only and can be accessed in Word mode only. 这些位只支持写操作,并且只能按16位写入。
0: No action on the corresponding ODRx bit 对输出端口不产生影响
1: Reset the corresponding ODRx bit 复位输出端口为0
Note: If both BSx and BRx are set, BSx has priority. 注意:如果同时设置了BSx和BRx,则BSx具有优先权。
Bits 15:0 BSy:Port x Set bit y (y = 0 .. 15)
These bits are write-only and can be accessed in Word mode only. 这些位只支持写操作,并且只能按16位写入。
0: No action on the corresponding ODRx bit 对输出端口不产生影响
1: Set the corresponding ODRx bit 置位输出端口为1
6、GPIOx_BRR
输出端口复位寄存器,将输出端口复位为0
Bits 31:16 Reserved 保留
Bits 15:0 BRy: Port x Reset bit y (y = 0 .. 15)
These bits are write-only and can be accessed in Word mode only. 这些位只支持写操作,并且只能按16位写入。
0: No action on the corresponding ODRx bit 对输出端口不产生影响
1: Reset the corresponding ODRx bit 复位输出端口为0
7、GPIOx_LCKR
该寄存器用来锁定端口配置,再下一次复位之前保持端口状态不被更改。
This register is used to lock the configuration of the port bits when a correct write sequence is applied to bit 16 (LCKK). The value of bits [15:0] is used to lock the configuration of the GPIO. During the write sequence, the value of LCKR[15:0] must not change. When the LOCK sequence has been applied on a port bit it is no longer possible to modify the value of the port bit until the next reset.
该寄存器在被写入正确的序列时,将锁定端口的配置。位0到15用于锁定GPIO配置。在序列写入时,LCKR寄存器不能被更改。当锁定序列被应用于1个端口时,该端口的状态无法被改变,直到下一次复位。
Each lock bit freezes the corresponding 4 bits of the control register (CRL, CRH). 每个锁存位可以锁定控制寄存器的4位
Bits 31:17 Reserved
Bit 16 LCKK[16]: Lock key
This bit can be read anytime. It can only be modified using the Lock Key Writing Sequence. 这个位可以随时读取。只能用Lock Key修改写入序列。
0: Port configuration lock key not active 端口配置锁定未**
1: Port configuration lock key active. GPIOx_LCKR register is locked until the next reset. 端口配置锁定**,GPIOx_LCKR被锁定,直到下一次复位
LOCK key writing sequence: Lock Key写入序列
Write 1
Write 0
Write 1
Read 0
Read 1 (this read is optional but confirms that the lock is active) 此读取是可选的,但需要确认锁定处于活动状态
Note: During the LOCK Key Writing sequence, the value of LCK[15:0] must not change. 注意:在锁定序列写入时,LCK的15到0位必须不能改变
Any error in the lock sequence will abort the lock. 锁定序列中的任何错误都将中止锁定。
Bits 15:0 LCKy: Port x Lock bit y (y = 0 .. 15)
These bits are read write but can only be written when the LCKK bit is 0. 这些位都可读写操作,但是只可以在LCKK位为0时执行写操作
0: Port configuration not locked 端口配置未锁定
1: Port configuration locked. 端口配置锁定