【STM32】GPIO基础知识、8种工作模式、10种寄存器详细介绍

一、GPIO入门知识

(1)GPIO是什么?

全称:general purpose intput output 通用输入输出端口。

可以做输入也可以做输出。GPIO端口可通过程序配置成输入或者输出。

(2)引脚和GPIO的区别和联系?

STM32的引脚中,有部分是做GPIO使用,部分是电源引脚/复位引脚/启动模式引脚/晶振引脚/调试下载引脚。

(3)STM32F767IGT6 IO口引脚资源

①一共有9组IO:PA~PI ②其中PA~PH每组16个IO,PI只有PIO~PI11。

③一共有140个I0口:16*8+12=140

(4)绝多数引脚都是GPIO,有限的引脚怎么实现更多的功能?

STM32的大部分引脚除了当GPIO使用外,还可以复用为外设功能引脚(比如串口,定时器,CAN,ADC,DAC等)。一个引脚,可以作为IO口,同时也可以作为复用功能外设引脚。

(5)上电复位后IO口状态?

上电复位后,GPIO默认为输入浮空状态,部分特殊功能引脚为特定状态。

复位后,调试引脚处于复用功能上拉/下拉状态:

PA15:JTDI处于上拉状态

PA14:JTCK/SWCLK处于下拉状态

PA13:JTMS/SWDAT处于下拉状态

PB4:NJTRST处于上拉状态

PB3:JTDO处于浮空状态

(5)复用原理

AFRL复用功能低位寄存器,控制8个IO口。每四位控制1个引脚,可以配置该引脚复用为AF0~AF15。

二、GPIO的8种工作模式

                                                                           表1 GPIO的8种工作模式

4种输入模式

对应的标识

作用

输入浮空

 

多用于外部按键输入,在浮空输入状态下,IO 的电平状态是不确定的,完全由外部输入决定。

输入上拉

GPIO_MODE_INPUT

IO 外部上拉电阻输入

输入下拉

 

IO 外部下拉电阻输入

模拟输入

GPIO_MODE_ANALOG

用于 ADC 模拟输入,或者低功耗下省电

 

 

 

4种输出模式(带上下拉)

 

 

开漏输出(带上拉或者下拉)

 

GPIO_MODE_OUTPUT_OD

IO 输出 0 接 GND,IO 输出 1,悬空,IO 口的状态由上拉电阻拉高电平。由于是开漏输出模式 IO 口也可以由外部电路改变为低电平或不变。

开漏复用功能(带上拉或者下拉)

 

GPIO_MODE_AF_OD

 

推挽式输出(带上拉或者下拉)

 

GPIO_MODE_OUTPUT_PP

IO 输出 0接 GND, IO 输出 1 接 VCC,读取输入值是未知的

推挽式复用功能(带上拉或者下拉)

 

GPIO_MODE_AF_PP

 

                                                                                  表2 GPIO的4种输出速度

4种最大输出速度

速度

对应的标识

2MHZ

低速

GPIO_SPEED_LOW

25MHZ

中速

GPIO_SPEED_MEDIUM

50MHZ

快速

GPIO_SPEED_FAST

100MHZ

高速

GPIO_SPEED_HIGH

                                                                              表3 GPIO的上下拉情况说明

上/下拉

对应的标识

无上下拉

GPIO_NOPULL

上拉

GPIO_PULLUP

下拉

GPIO_PULLDOWN

输入浮空模式分析:

①无上、下拉。

②输出驱动器被禁止,模拟和复用功能输入也不起作用。

 ③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

输入上拉模式分析:

①外部上拉电阻起作用

 ②输出驱动器被禁止,模拟和复用功能输入也不起作用。

③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

输入下拉模式分析:

①外部下拉电阻起作用

②输出驱动器被禁止,模拟和复用功能输入也不起作用。

 ③施密特触发器输入被打开,CPU从输入数据寄存器去读取IO口的状态。

模拟输入模式分析:

①外部上、下拉电阻都不起作用

② 信号到达施密特触发器之前直接走模拟通道,ADC会去采集IO口的电压信号。

③CPU 会去读取ADC控制单元的相关的寄存器,去读取IO口的模拟信号,ADC控制单元把它转化为数字信号。

开漏模式分析:

①CPU往BSRR寄存器写值,并反映到输出数据寄存器(ODR),设置对应的I0口的为为1,ODR相应的位也为1

② 写1时经过输出控制电路,N-MOS管截至,没有反映到IO口。此时,要想使IO口输出1,要接上拉电阻。

③ 写0时经过输出控制电路,N-MOS导通,此时接下拉电阻,IO口输出0。

④CPU可以通过输入数据寄存器,来读取IO口电平的状态。

推挽输出模式分析:

 ①输出数据寄存器为1,IO口就为高电平。

 ② 输出数据寄存器为0,IO口就为低电平。

 ③ 写1,P-MOS导通,IO口输出VDD,为高电平。写0,N-MOS导通,IO口输出VSS,为低电平。

 ④ CPU可以通过输入数据寄存器,来读取IO口电平的状态。

三、GPIO相关的寄存器

                                                                            表4GPIO寄存器表述

寄存器种类

英文表示

说明

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

port mode register(MODE R)

4个32位配置寄存器

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

port output type register(O TYPE R)

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

port output speed register(O SPEED R)

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

port pull-up/pull-down register(PU PD R)

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

port input data register(I D R)

2个32位数据寄存器

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

port output data register(O D R)

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

port bit set/reset register(B S R R)

1个32位置/位复位寄存器

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

port configuration lock register(LCK R)

1个32位锁存寄存器

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

alternate function low register(A F R L )

2个复用功能寄存器

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

alternate function high register(A F R H)

 

<think>嗯,用户让我介绍一下STM32GPIO基础知识。首先,我需要确定用户可能是什么背景。如果是初学者,可能需要从基础概念讲起,比如GPIO是什么,有什么作用。然后,可能需要分点讲解,比如工作模式寄存器配置、常用函数库等。 用户可能在使用STM32进行项目开发,比如控制外设或者传感器,所以需要了解如何配置GPIO引脚。我应该涵盖输入和输出模式,推挽和开漏的区别,以及上下拉电阻的应用场景。另外,寄存器配置部分可能对直接操作寄存器的高级用户有用,而HAL库函数更适合初学者。 还要注意用户可能遇到的问题,比如配置错误导致引脚无法正常工作,或者电流驱动能力不足。这时候需要提醒注意事项,比如避免过载、配置匹配模式、未使用的引脚处理等。 需要检查是否有遗漏的重要知识点,比如复用功能和重映射,这在某些特定外设(如USART、I2C)的使用中很重要。另外,中断配置也是GPIO的重要部分,特别是外部中断的应用。 要确保语言简洁明了,避免使用过于专业的术语,或者如果使用了,要适当解释。结构上分点列出,方便阅读。最后,可能需要一个总结,帮助用户快速回顾关键点。</think>好的,我来为您梳理STM32 GPIO基础知识(分点说明,使用中文): 📌**一、GPIO基本概念** GPIO = General Purpose Input/Output(通用输入输出端口) - STM32的每个GPIO引脚均可通过编程配置为**数字输入**或**数字输出**模式 - 典型应用:控制LED、读取按键、驱动外设、通信接口复用等 🔧**二、GPIO工作模式8种)** 1. **输入模式** - 浮空输入(常用作按键检测) - 上拉输入(默认高电平) - 下拉输入(默认低电平) - 模拟输入(ADC采样时使用) 2. **输出模式** - 推挽输出(强驱动能力,高低电平明确) - 开漏输出(需外接上拉电阻,适合总线通信) - 复用推挽(用于外设功能如SPI、I2C) - 开漏复用(同上,开漏特性) 💡**三、关键寄存器** 1. **GPIOx_MODER**:模式寄存器(设置输入/输出/复用/模拟) 2. **GPIOx_OTYPER**:输出类型寄存器(推挽/开漏) 3. **GPIOx_OSPEEDR**:输出速度寄存器(低速/中速/高速/超高速) 4. **GPIOx_PUPDR**:上拉下拉寄存器 5. **GPIOx_IDR**:输入数据寄存器 6. **GPIOx_ODR**:输出数据寄存器 📝**四、HAL库常用函数** ```c // 初始化函数 HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *InitStruct); // 写引脚 void HAL_GPIO_WritePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState); // 读引脚 GPIO_PinState HAL_GPIO_ReadPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); // 翻转电平 void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); ``` ⚠️**五、重要注意事项** 1. **电压匹配**:IO口电平取决于供电电压(VDD),3.3V系统不能直接连接5V器件 2. **驱动能力**:单个GPIO最大吸收电流约20mA,驱动大功率设备需加三极管/MOS管 3. **复用功能**:使用USART、SPI等外设时需配置AFRL/AFRH寄存器选择复用功能 4. **未使用引脚**:建议配置为模拟输入模式以降低功耗 🔨**六、配置流程示例(以点亮LED为例)** 1. 使能GPIO时钟:`__HAL_RCC_GPIOA_CLK_ENABLE()` 2. 定义初始化结构体: ```c GPIO_InitTypeDef GPIO_InitStruct = {0}; GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 推挽输出 GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; ``` 3. 调用初始化函数:`HAL_GPIO_Init(GPIOA, &GPIO_InitStruct)` 4. 控制电平:`HAL_GPIO_WritePin(GPIOA, GPIO_PIN_5, GPIO_PIN_SET);` 📊**七、模式选择指南** | 应用场景 | 推荐模式 | |-------------------|-----------------------| | 驱动LED | 推挽输出 + 合适速度 | | I2C总线 | 开漏输出 + 外接上拉 | | 按键检测 | 上拉/下拉输入 | | ADC采样 | 模拟输入模式 | | PWM输出 | 复用推挽输出 | 掌握这些基础知识后,建议通过STM32CubeMX工具进行可视化配置练习,可快速验证GPIO配置效果。实际开发中还需结合具体型号的参考手册查看引脚复用映射表。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值