GPIO基础知识
GPIO配置是所有外设驱动的基础。
STM32H7 的 GPIO 特性如下:
① 输出状态:开漏/推挽 + 上拉/下拉电阻。
② 通过输出数据寄存器(GPIOx_ODR)或者外设(GPIO 设置为复用模式时)输出数据。
③ GPIO 速度等级设置。
④ 输入状态:浮空,上拉/下拉,模拟。
⑤ 通过输入数据寄存器(GPIOx_IDR)或者外设(GPIO 设置为复用模式)输入数据。
⑥ 通过寄存器 GPIOx_BSRR 实现对寄存器 GPIOx_ODR 的位操作。
⑦ 通过配置寄存器 GPIOx_LCKR 的锁机制,实现冻结 IO 口配置。
⑧ 每两个时钟周期就可以翻转一次 IO。
⑨ 高度灵活的引脚复用功能,允许 IO 引脚既可以做 GPIO 也可以做功能复用。
STM32H7 的 GPIO 端口可以配置为如下的 8 种模式: ① 输入浮空
② 输入上拉
③ 输入下拉
④ 模拟功能
⑤ 具有上拉或下拉功能的开漏输出
⑥ 具有上拉或下拉功能的推挽输出
⑦ 具有上拉或下拉功能的复用功能推挽
⑧ 具有上拉或下拉功能的复用功能开漏
由于上拉和下拉是可选配置,对应的 HAL 库配置使用下面 6 种就可以表示:
① GPIO_MODE_INPUT 输入模式
② GPIO_MODE_OUTPUT_PP 推挽输出
③ GPIO_MODE_OUTPUT_OD 开漏输出
④ GPIO_MODE_AF_PP 复用推挽
⑤ GPIO_MODE_AF_OD 复用开漏
⑥ GPIO_MODE_ANALOG 模拟模式
开漏输出模式输出高电平的驱动能力完全由外接上拉电阻决定,但是其输出低电平的驱动能力很强。
相对于开漏输出模式,推挽输出最大优势是输出高电平时,上升时间快,电压驱动能力强。
IO 补偿单元用于控制 I/O 通信压摆率(tfall / trise)以此来降低 I/O 噪声。当前 STM32H7 的速度等级可以配置为以下四种:
#define GPIO_SPEED_FREQ_LOW ((uint32_t)0x00000000U) /*!< Low speed */
#define GPIO_SPEED_FREQ_MEDIUM ((uint32_t)0x00000001U) /*!< Medium speed */
#define GPIO_SPEED_FREQ_HIGH ((uint32_t)0x00000002U) /*!< Fast speed */
#define GPIO_SPEED_FREQ_VERY_HIGH ((uint32_t)0x00000003U) /*!< High speed */
使用后两种速度等级的话,最好使能 IO 补偿单元。
从功耗和防干扰考虑,不使用的引脚设置为模拟模式,悬空即可。
硬件连接
将 LED,独立按键五项摇杆按键的跳线(KEY JMP)接好。(其实已经默认用跳帽连接好了,如图所示)


我们使用的是LED1,其对应的IO端口是PB6;使用CTR(五项摇杆中间)按键,其对应的IO端口是PI11。
本实验的操作与现象是:按下 CTR(五项摇杆中间)按键 LED1会熄灭,松开 LED1会亮。
实验步骤与代码详解
本实验是用MDK-ARM调试,基于HAL库的,开发板为STM32H743ⅡT6。
| 需要包括的头文件 | |
|---|---|
| main.c | main.h、gpio.h |
| main.h | stm32h7xx_hal.h |
| gpio.c | gpio.h |
| gpio.h | main.h |
① GPIO初始化
gpio.h中定义GPIO初始化函数:
void MX_GPIO_Init(void);
main.h中对所要用的引脚与端口进行宏定义:
#define KEY_Pin GPIO_PIN_11
#define KEY_GPIO_Port GPIOI
#define LED_Pin GPIO_PIN_6
#define LED_GPIO_Port GPIOB
GPIO_PIN_11、GPIOI、GPIO_PIN_6、GPIOB已在stm32h7xx_hal.h中定义过,故main.h要包括该头文件,而在main.h中进行宏定义,是为了方便移植,其作用相当于别名。
gpio.c中实现GPIO初始化函数:
(1)定义GPIO_InitTypeDef类型的结构体GPIO_InitStruct
GPIO_InitTypeDef GPIO_InitStruct = {
0};
具体查看GPIO_InitTypeDef的结构体,在stm32h7xx_hal_gpio.h中进行了定义,其结构体元素包括Pin、Mode、Pull、Speed、Alternate
typedef struct
{
uint32_t Pin; //指定要配置的GPIO引脚
uint32_t Mode; //指定选定接点的工作模式
uint32_t Pull; //指定选定接点的上拉或下拉激活
uint32_t Speed; //指定选定接点的速度
uint32_t Alternate; //要连接到所选引脚的外围设备
}GPIO_InitTypeDef;
(2)使能GPIOI、GPIOH、GPIOB的时钟
/* GPIO Ports Clock Enable 使能GPIO端口时钟 */
__HAL_RCC_GPIOI_CLK_ENABLE();
__HAL_RCC_GPIOH_CLK_ENABLE();
__HAL_RCC_GPIOB_CLK_ENABLE();
(3)配置GPIO引脚输出电平
HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET)

本文介绍STM32H7系列微控制器的GPIO配置方法,包括输出状态、输入状态、速度等级设置等内容,并通过一个具体的实验案例展示了GPIO配置的具体应用。
最低0.47元/天 解锁文章
989

被折叠的 条评论
为什么被折叠?



