STM32学习笔记:通用输入输出GPIO

时间:2024-03-19 17:09:44

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的寄存器

1、GPIOx_CRL

2、GPIOx_CRH

3、GPIOx_IDR

4、GPIOx_ODR

5、GPIOx_BSRR

6、GPIOx_BRR

7、GPIOx_LCKR


1、GPIO的寄存器

寄存器相关的介绍在文件RM0008-Reference manual 中,该文件的下载地址如下:

https://www.st.com/resource/en/reference_manual/cd00171190-stm32f101xx-stm32f102xx-stm32f103xx-stm32f105xx-and-stm32f107xx-advanced-armbased-32bit-mcus-stmicroelectronics.pdf

1、GPIOx_CRL

STM32学习笔记:通用输入输出GPIO

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

STM32学习笔记:通用输入输出GPIO

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 位的形式读出。

STM32学习笔记:通用输入输出GPIO

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寄存器来实现置位或者复位

STM32学习笔记:通用输入输出GPIO

Bits 15:0 ODRy: Port output data (y= 0 .. 15)

5、GPIOx_BSRR

对输出端口进行置位/复位的寄存器,可以用来设置 GPIO 端口的输出位是 0 还是 1

STM32学习笔记:通用输入输出GPIO

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

STM32学习笔记:通用输入输出GPIO

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位

STM32学习笔记:通用输入输出GPIO

 

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.                                                                                                        端口配置锁定