STM32中IO端口位的基本结构及相关寄存器

本文详细介绍了STM32的GPIO端口,包括GPIO概述、端口模式配置。GPIO包含多种配置寄存器,如模式、输出类型、速度、上拉/下拉等。在输入模式下,GPIO使用施密特触发器进行电平转换,而在输出模式下,通过P-MOS和N-MOS管实现推挽或开漏输出。此外,还探讨了GPIO的复用功能,允许外设控制GPIO引脚。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. GPIO概述

GPIO是通用输入/输出端口的简称、是STM32可控制的引脚。GPIO的引脚与外部硬件设备链接,可实现与外部通讯、控制外部硬件或者采集外部硬件数据的功能。每个通用 I/O 端口包括4 个 32 位配置寄存器:GPIO 端口模式寄存器(GPIOx_MODER)、GPIO 端口输出类型寄存器(GPIOx_OTYPER)、GPIO 端口输出速度寄存器(GPIOx_OSPEEDR)、GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR);2 个 16位数据寄存器:GPIO 端口输入数据寄存器(GPIOx_IDR) 、GPIO 端口输出数据寄存器(GPIOx_ODR);1 个 32 位置位/复位寄存器(GPIOx_BSRR);1 个 32 位配置锁定寄存器(GPIOx_LCKR);2 个 32 位复用功能选择寄存器:GPIO 复用功能低位寄存器(GPIOx_AFRL)、GPIO 复用功能高位寄存器(GPIOx_AFRH)——配置对应的 IO 口。

以下是经典IO端口位的基本结构:

1.1 保护二极管

IO引脚上下两边两个⼆极管⽤于防⽌引脚外部过⾼/过低的电压输⼊,当引脚电压⾼于VDD时,上⽅的⼆极管导通,当引脚电压低于VSS时,下⽅的⼆极管导通,防⽌不正常电压引⼊芯⽚导致芯⽚烧毁。尽管如此,还是不能直接外接⼤功率器件,须加⼤功率及隔离电路驱动,防⽌烧坏芯⽚或者外接器件⽆法正常⼯作。

1.2 P-MOS管和N-MOS管

GPIO为输出模式,由P-MOS管和N-MOS管组成的单元电路使得GPIO具有“推挽输出”和“开漏输出”的模式。这两

<think>好的,我现在需要帮助用户查找关于STM32F103微控制器IO端口配置寄存器的详细信息和教程。用户明确提到了CRL、CRH等寄存器,所以我要先回顾一下之前提供的引用内容,确保信息准确。 首先,引用[1]提到STM32的每个IO端口有7个寄存器,其中常用的四个是CRL、CRH、IDR、ODR。CRL和CRH分别负责低8和高8的配置,这点很重要。用户可能需要了解如何具体设置这些寄存器来配置引脚的模式,比如输入、输出、复用功能等。然后,引用[3]详细列出了每个寄存器的名称和作用,比如GPIOx_CRL和GPIOx_CRH用于配置模式,IDR和ODR用于数据输入输出。同时,用户可能对寄存器设置感兴趣,比如每个引脚占用的4个配置,对应不同的模式(如推挽输出、开漏输出等)。接下来,我需要确保回答结构清晰,分步骤解释每个寄存器的作用。例如,先介绍CRL和CRH的结构,再说明如何设置不同的模式,接着讲解数据寄存器的使用,以及BSRR和BRR的作用。此外,时钟配置也是一个关键点,因为在使用GPIO前必须启用对应的时钟,这在引用[3]中提到过。 用户可能需要具体的例子,比如如何将PA0设置为推挽输出,这需要配置CRL的相应,并设置时钟使能。同时,需要注意寄存器的访问方式,必须按32字访问,不能半字或字节操作,这点需要强调,避免用户出错。最后,生成相关问题时要围绕寄存器配置、常见问题、时钟设置和应用场景展开,帮助用户深入理解。需要确保引用正确,比如引用[1]和[3]中的内容,并在适当的置添加引用标识,保持回答的可信度。</think>### STM32F103 IO端口配置寄存器详解 STM32F103的每个IO端口通过**7个寄存器**进行控制,其中核心配置寄存器为**GPIOx_CRL**和**GPIOx_CRH**。以下为关键寄存器功能及配置方法: --- #### 1. **端口配置寄存器(CRL/CRH)** - **GPIOx_CRL**:控制端口低8(Pin0-Pin7)的模式与速率。 - **GPIOx_CRH**:控制端口高8(Pin8-Pin15)的模式与速率[^1]。 - **每个引脚占用4个**,用于配置以下模式: - **输入模式**:浮空输入、上拉/下拉输入。 - **输出模式**:推挽输出、开漏输出。 - **复用功能**:复用推挽/开漏。 - **速率**:2MHz、10MHz、50MHz。 示例:将PA0设置为推挽输出(50MHz): ```c GPIOA->CRL |= 0x3 << 0; // 输出模式,50MHz GPIOA->CRL |= 0x0 << 2; // 推挽输出 ``` --- #### 2. **数据寄存器(IDR/ODR)** - **GPIOx_IDR**:读取引脚输入状态(低16有效)。 - **GPIOx_ODR**:设置引脚输出电平(直接写入值)[^1]。 示例:读取PA1电平并设置PA2输出高电平: ```c uint8_t input = (GPIOA->IDR & (1 << 1)) >> 1; // 读取PA1 GPIOA->ODR |= (1 << 2); // PA2输出高电平 ``` --- #### 3. **快速操作寄存器(BSRR/BRR)** - **GPIOx_BSRR**:通过高16引脚,低16引脚。 - **GPIOx_BRR**:快速复引脚(仅低16有效)[^3]。 示例:快速设置PA3为高电平,PA4为低电平: ```c GPIOA->BSRR = (1 << 3) | (1 << (4 + 16)); // PA3置,PA4复 ``` --- #### 4. **配置流程** 1. **使能时钟**:通过RCC寄存器开启对应GPIO端口的时钟(如`RCC_APB2ENR |= 1 << 2`开启GPIOA时钟)[^3]。 2. **配置CRL/CRH**:设置引脚模式与速率。 3. **操作IDR/ODR**:读写数据。 --- #### 注意事项 - **寄存器访问必须按32操作**,不可使用半字或字节访问[^3]。 - **复用功能需配合外设寄存器**(如USART、SPI)使用。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘颖Eleven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值