历史上的今天
返回首页

历史上的今天

今天是:2025年02月03日(星期一)

2021年02月03日 | STM32F4XXGPIO知识点总结<2>——GPIO寄存器介绍

2021-02-03 来源:eefocus

在使用库函数编写STM32单片机GPIO程序时,一般都是通过配置相应的寄存器来实现具体的功能。下面将根据《STM32参考手册》对各个寄存器进行梳理。


每个通用I/O端口包括4个32位配置寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR和GPIOx_PUPDR)、2个32位数据寄存器(GPIOx_IDR和GPIOx_ODR)、一个32位置位/复位寄存器(GPIOx_BSRR)、1个32位锁存寄存器(GPIOx_LCKR)和2个32位复用功能选择寄存器(GPIOx_AFRH和GPIOx_AFRL)。


GPIO按照功能分类:

(1)I/O端口控制寄存器

每个GPIO有4个32位存储器映射的控制寄存器(GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR),可配置多达16个I/O。GPIOx_MODER寄存器用于选择I/O方向(输入、输出、AF、模拟)。GPIOx_OTYPER和GPIOx_OSPEEDR寄存器分别用于选择输出类型(推挽或开漏)和速度(无论采用哪种I/O方向,都会直接将I/O速度引脚连接到相应的GPIOx_OSPEEDR寄存器位)。无论采用哪种I/O方向,GPIOx_PUPDR寄存器都用于选择上拉/下拉

(2)I/O端口数据寄存器

每个GPIO都具有2个16位数据寄存器:输入和输出数据寄存器(GPIOx_IDR和GPIOx_ODR)。GPIOx_ODR用于存储输出数据,可对其进行读/写访问。通过I/O输入的数据存储到输入数据寄存器(GPIOx_IDR)中,它是一个只读寄存器。

(3)I/O数据为操作

置位复位寄存器(GPIOx_BSRR)是一个32位寄存器,它允许应用程序在输出数据寄存器(GPIOx_ODR)中对各个单独的数据为执行置位和复位操作。置位复位寄存器的大小是GPIOx_ODR的两倍。具体实现机理参考GPIOx_BSRR寄存器的介绍。

(4)GPIO锁定机制

通过将特定的写序列应用到GPIOx_LCKR寄存器可以冻结GPIO控制寄存器。冻结的寄存器包括GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR、GPIOx_AFRL和GPIOx_AFRH。具体锁定设置参考GPIOx_LCKR寄存器介绍。


下面对GPIO寄存器进行详细的介绍。可通过字节、半字或字对GPIO寄存器进行访问。

GPIO端口模式寄存器(GPIOx_MODER)(x=A...I)

GPIO port mode register

偏移地址:0x00

复位值:

0xA800 0000(端口A)

0x0000 0280(端口B)

0x0000 0000(其他端口)

位2y:2y+1    MODERy[1:0]:端口x配置位(Port x configuration bits)(y=0...15)

                      这些位通过软件写入,用于配置I/O方向模式。

                     00:输入(复位状态)

                     01:通用输出模式

                    10:复用功能模式

                    11:模拟状态

GPIO端口输出类型寄存器(GPIOx_OTYPER)(x = A...I)

GPIO port output type register

偏移地址:0x04

复位值:0x0000 0000

位31:16保留,必须保持复位值。

位15:0  OTY[1:0]:端口x配置位(PORT x configuration bits)(y=0...15)

这些位通过软件写入,用于配置I/O输出类型。

0:输出推挽(复位状态)

1:输出开漏


GPIO端口输出速度寄存器(GPIOx_OSPEEDR)(x=A...I)

GPIO port output speed register

偏移地址:0x08

复位值:

0x0000 00C0(端口B)

0x0000 0000(其它端口)

位2y:2y+1   OSPEEDRy[1:0]:端口x配置位(PORT x configuration bits)(y=0...15)

                      这些位通过软件写入,用于配置I/O输出速度。

                       00:2MHZ(低速)

                       01:25MHZ(中速)

                       10:50MHZ(快速)

                       11:30pF时为100MHZ(高速)(15pf时为80MHZ输出(最大速度))

GPIO端口上拉/下拉寄存器(GPIOx_PUPDR)(x=A...I)

GPIO port pull-up/pull-down register

偏移地址:0x0C

复位值:

0x6400 0000(端口A)

0x0000 0100(端口B)

0x0000 0000(其它端口)

位2y:2y+1  PUPDRy[1:0]:端口x配置位(PORT x configuration bits)(y=0...15)

这些位通过软件写入,用于配置I/O上拉或下拉

 00:无上拉或下拉

 01:上拉

 10:下拉

 11:保留

  • GPIO端口输入数据寄存器(GPIOx_IDR)(x=A...I) 

GPIO port input data register

偏移地址:0x10

复位值:0x0000 XXXX(其中X表示未定义)

位31:16保留,必须保持复位值

位15:0  IDRy[15:0]:端口输入数据(Port input data)(y=0...15)

这些位为只读形式,只能在字模式下访问。它们包含相应I/O端口的输入值


GPIO端口输出数据寄存器(GPIOx_ODR)(x=A...I)

GPIO port output data register

偏移地址:0x14

复位值:0x0000 0000

位31:16保留,必须保持复位值。

位15:0 ODRy[15:0]:端口输出数据(Port output data)(y=0...15)

这些位可通过软件读取和写入

注意:通过写入GPIOx_BSRR寄存器,可以分别对ODR位进行置位和复位(x=A...I)


GPIO端口置位/复位寄存器(GPIOx_BSRR)(x=A...I)

GPIO port bit set/reset register

偏移地址:0x18

复位值:0x0000 0000

位31:16  BRy:端口x复位位y(Port x reset bit y)(y=0...15)

                         这些位为只写形式,只能在字、半字或者字节模式下访问。读取这些位可返回值0x0000

                        0:不会对相应位的ODRx位执行任何操作

                        1:对相应的ODRx位进行复位

 位15:0    BSy:端口x置位位y(Port x set bit y)(y=0...15)

                     这些位为只写形式,只能在字、半字或字节模式下访问。读取这些位可返回值0x0000

                    0:不会对相应的ODRx位执行任何操作

                    1:对相应的ODRx位进行置位

注意:如果同时对BSx和BRx置位,则BSx的优先级更高。


GPIO端口配置锁定寄存器(GPIOx_LCKR)(x=A...I)

GPIO port configuration lock register

当正确的写序列应用到第16位(LCKK)时,此寄存器将用于锁定端口位的配置。位[15:0]的值用于锁定GPIO的配置。在写序列期间,不能更改LCKR[15:0]的值。将LOCK序列应用到某个端口位后,在执行下一次复位之前,将无法对端口位的值进行更改。


注意:可使用特定的写序列对GPIOx_LCKR寄存器执行写操作。在此写序列期间只允许使用字访问(32位长)

每个锁定位冻结一个特定的配置寄存器(控制寄存器和复用功能寄存器)

偏移地址:0x1C

复位值:0x0000 0000

访问:仅32位字,读/写寄存器

位31:17保留,必须保持 复位值

位16 LCKK[16]:锁定键(Lock Key)

可随时读取此位。可使用锁定键写序列对其进行修改。

0:端口配置锁定键未激活。

1:端口锁定键已激活。直到MCU复位时,才锁定GPIOx_LCKR寄存器。

锁定键写序列:

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’,直到下一次CPU复位为止。

位15:0 LCKy:端口x锁定位y(port x lock bit y )(y = 0...15)

这些位都是读/写位,但只能在LCKK位等于‘0’时执行写操作

0:端口配置未锁定

1:端口配置已锁定

  • GPIO复用功能低位寄存器(GPIOx_AFRL)(x=A...I)

GPIO alterate function low register

偏移地址:0x20

复位值:0x0000 0000

位31:0  AFRLy:端口x位y的复用功能选择(Alternate function selection for port x bit y)(y=0...7)

这些位通过软件写入,用于配置复用功能I/O。

AFRLy选择:

0000:AF0          0001:AF1        0010:AF2        0011:AF3       

0100:AF4            0101:AF5           0110:AF6           0111:AF7

1000:AF8            1001:AF9           1010:AF10        1011:AF11

1100:AF12           1101:AF13        1110:AF14         1111:AF15

  • GPIO复用功能高位寄存器(GPIOx_AFRH)(x=A...I)

GPIO alternate function high register

偏移地址:0x24

复位值:0x0000 0000

位31:0  AFRHy:端口x位y的复用功能选择(Alternate function selection for port x bit y)(y=0...7)

这些位通过软件写入,用于配置复用功能I/O。

AFRLy选择:

0000:AF0          0001:AF1        0010:AF2        0011:AF3       

0100:AF4            0101:AF5           0110:AF6           0111:AF7

1000:AF8            1001:AF9           1010:AF10        1011:AF11

1100:AF12           1101:AF13        1110:AF14         1111:AF15


推荐阅读

史海拾趣

Highland Electronics Co Ltd公司的发展小趣事

在公司快速发展的过程中,High Tech Chips Inc深刻认识到单打独斗的局限性。因此,公司积极寻求与全球知名科技企业的战略合作。通过与华为、三星等手机制造商的合作,High Tech Chips Inc的芯片产品被广泛应用于这些企业的旗舰机型中,极大地提升了产品的知名度和市场占有率。同时,公司还与英伟达、英特尔等芯片巨头建立了技术合作关系,共同推动芯片技术的创新和发展。

ETERNA公司的发展小趣事

ETERNA公司起源于1856年,由格斯塔夫·罗斯切尔德和约翰·乌尔里希在瑞士的圣伊米尔创立。自成立之初,ETERNA便以精湛的制表工艺和不懈的创新精神闻名于世。公司不断推出具有划时代意义的腕表产品,其中最具代表性的是其“五点星座”设计,这一设计成为了品牌的象征,并引领了制表业的新潮流。ETERNA通过不断的技术创新和设计突破,逐渐在电子行业中崭露头角。

B&F;公司的发展小趣事

随着FK系列飞机在全球范围内的知名度不断提升,B&F公司意识到,要想进一步拓展市场,必须建立完善的全球分销网络。于是,公司开始积极寻找合作伙伴,并在全球范围内建立分销点。通过这一举措,B&F公司的产品得以迅速进入更多国家,进一步提升了公司的市场份额和影响力。

诚润电子(CHEVRON)公司的发展小趣事

诚润电子(CHEVRON)自创立之初,就以技术为核心竞争力。公司在2010年正式成立,由一群热衷于电子保护元件研发的工程师创立。他们深知,在这个日新月异的电子行业中,只有不断创新,才能在竞争中立于不败之地。因此,诚润电子从一开始就专注于电子保护元件的研发和生产,通过不断的技术创新,逐渐在市场中树立起了自己的品牌。

Curtis Industries公司的发展小趣事

Curtis Industries公司一直将品质管理作为企业发展的核心。公司建立了完善的品质管理体系,从原材料采购到产品生产、检测等各个环节都严格把控品质。同时,公司还引入了先进的生产设备和技术,确保产品质量达到行业最高标准。这种对品质的严格把控赢得了客户的信任和好评,也为公司的长期发展提供了有力保障。

Chemi-Con公司的发展小趣事

随着电子行业的快速发展,Chemi-Con公司不断加大对研发的投入,致力于技术创新和产品升级。公司研发团队在铝电解电容器的基础上,不断推出性能更优、体积更小、寿命更长的产品,满足了市场对于高效、可靠电容器的迫切需求。此外,Chemi-Con还积极拓展产品线,涉足了多层陶瓷电容器、薄膜电容器等多个领域,为客户提供更加丰富的选择。

问答坊 | AI 解惑

89C51

本帖最后由 paulhyde 于 2014-9-15 09:33 编辑 89C51FDBDFBDGD  …

查看全部问答>

开关电源分类介绍

开关电源的分类介绍  现代开关电源有两种:一种是直流开关电源;另一种是交流开关电源。本书要介绍的只是直流开关电源,其功能是将电能质量较差的原生态电 源(粗电),如市电电源或蓄电池电源,转换成满足设备要求的质量较高的直流电压(精电) ...…

查看全部问答>

计算机系统总线基础

一. 总线的概念 在计算机系统中,不同的子系统必须具有连接彼此的接口,比如,内存和处理器需要通信,处理器和I/O设备也需要通信。这些工作都是由总线来完成的。总线就是一条共享的通信链路,它用一套线路来连接多个子系统。下图是一个典型的计算 ...…

查看全部问答>

关于PWM控制的全桥逆变 有IC没

请问有没有全桥逆变的IC模块 通过PWM控制的 及单极性SPWM控制算法…

查看全部问答>

有没用TVP5147做解码芯片的?我配置出来的效果很不好,怎么改进啊?!谁有优化后的参数表?

有没用TVP5147做解码芯片的?我配置出来的效果很不好,怎么改进啊?!谁有优化后的参数表?…

查看全部问答>

vxworks源码和tornado的target目录的问题

刚开始接触vxworks,现在在学习END驱动,看到tornado的target目录下的src里面有个文件是templateEnd.c,有点不明白这里面的代码和vxworks源码里面的MUXDevLoad的关系是怎么样的,是否在templateEnd.c里面提供的模板供我们在特定的芯片开发时按照上 ...…

查看全部问答>

求CRC校验程序

现有电脑与单片机串口通讯数据 请大侠求证CRC校验方法 多谢 发送: A5 A5 00 1E 00 00 01 35 CA EC A5 A5 00 1E 00 01 01 35 FA DB A5 A5 00 1E 00 02 01 35 AA 82 A5 A5 00 1E 00 03 01 35 9A B5 A5 A5 00 1E 00 04 01 35 0A 30 A5 A5 00 ...…

查看全部问答>

wavecom,at串口访问,ring 能出现在命令与应答中吗?

wavecom,at串口访问,如果2个命令间隔时间短,会出现这样情况: 命令1  命令2  应答2  应答1 如果同时出现其他数据,如ring,问一下 (1) 命令1  命令2  ring  应答2   ...…

查看全部问答>

WinCE下的注册表读写,在线等,急~~~~

我在VC下的注册表读写问题为什么在EVC下运行成功,却无法对注册表修改?…

查看全部问答>