GPIO知识总结


前言

关于GPIO的知识点汇总,后期会补充


一、GPIO配置和初始化

	/*使能GPIO的时钟*/
	rcu_periph_clock_enable(RCU_GPIOA);
	
	/*GPIO初始化*/
	gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_8);

二、常用函数和单词

1.常用函数

gpio_init():初始化函数 可以选择GPIO端口(port),引脚(PIN)、输出模式、输出速度和管脚。

void gpio_init(uint32_t gpio_periph, uint32_t mode, uint32_t speed, uint32_t pin);
//periph:外设
gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_8);

在这里插入图片描述

gpio_bit_set():对GPIOA端口的pin0管脚的值设置为1。

void gpio_bit_set(uint32_t gpio_periph, uint32_t pin);
gpio_bit_set(GPIOA, GPIO_PIN_0);
//periph:外设

gpio_bit_reset():对GPIOA端口的pin0管脚的值设置为0。

void 
### GPIO 主要知识点总结 #### 1. **GPIO 的基本概念** GPIO 是 General Purpose Input Output 的缩写,表示通用输入输出端口。它是微控制器与外界交互的重要接口之一,能够实现多种功能,包括但不限于 LED 驱动、按键检测以及与其他设备通信。 --- #### 2. **GPIO 的配置流程** GPIO 的配置通常分为以下几个部分: - **使能时钟** 在使用任何外设之前,必须先使能其对应的时钟资源。例如,在 STM32 中,可以通过 `rcu_periph_clock_enable` 或者 `RCC_APB2PeriphClockCmd` 函数来启用 GPIO 所需的时钟[^1][^2]。 - **初始化设置** 初始化函数用于定义 GPIO 的具体行为,主要包括以下参数: - 端口号 (Port):指定使用的 GPIO 端口,如 GPIOA、GPIOB 等。 - 引脚号 (Pin):指定具体的引脚编号,如 GPIO_PIN_8。 - 工作模式 (Mode):可以选择输入模式、输出模式或者复用功能模式等。 - 输出速度 (Speed):决定 GPIO 的切换速率,常见的有低速、中速和高速选项。 示例代码如下: ```c gpio_init(GPIOA, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, GPIO_PIN_8); ``` --- #### 3. **GPIO 的常见工作模式** GPIO 支持多种工作模式,以下是几种典型的工作模式及其特点: - **输入模式** 输入模式下,GPIO 被配置为接收外部信号。根据需求可以选择不同的子模式,比如浮空输入、上拉输入或下拉输入。 - **输出模式** 输出模式下,GPIO 可以发送电平信号给外部设备。支持推挽输出和开漏输出两种形式。其中,推挽输出具有更高的驱动能力[^3]。 - **复用功能模式** 复用功能模式允许将 GPIO 配置为其他外设的功能引脚,例如 UART、I2C、SPI 等。不同系列的 MCU(如 STM32F1 和 STM32F7)在复用功能的选择机制上有一定差异[^4]。 --- #### 4. **GPIO 寄存器结构** 每个 GPIO 端口都有一组专用寄存器,用于管理和操作该端口的行为。主要寄存器包括: - **配置寄存器** (`GPIOx_CRL`, `GPIOx_CRH`):用于设置引脚的具体属性,如模式和速度。 - **数据寄存器** (`GPIOx_IDR`, `GPIOx_ODR`):分别存储当前引脚的状态(读取)和期望输出的值(写入)。 - **置位/复位寄存器** (`GPIOx_BSRR`):提供一种快速修改特定引脚状态的方式。 - **锁定寄存器** (`GPIOx_LCKR`):一旦锁定了某些引脚配置,它们就不能再被更改直到下次复位。 - **复用功能寄存器** (`GPIOx_AFRL`, `GPIOx_AFRH`):仅适用于较新的 STM32 系列(如 F7),用于选择引脚所关联的复用功能[^3]. --- #### 5. **GPIO 的应用实例** GPIO 广泛应用于各种嵌入式场景中,一些典型的例子包括: - 控制 LED 的亮灭。 - 实现简单的按钮检测逻辑。 - 连接传感器并采集模拟量或数字量的数据。 - 构建复杂的外围电路,如跑马灯效果展示。 示例程序片段展示了如何点亮一个 LED: ```c #include "stm32f10x.h" int main(void){ /* 开启 GPIOA 的时钟 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); /* 定义并初始化 GPIO 结构体 */ GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // 推挽输出模式 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // PA0 引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // 设置最大频率为 50 MHz GPIO_Init(GPIOA, &GPIO_InitStructure); // 应用初始化参数至 GPIOA /* 持续保持 PA0 高电平 */ GPIO_SetBits(GPIOA, GPIO_Pin_0); while(1){} } ``` --- #### 6. **注意事项** - 当 GPIO 被配置为复用功能时,务必确认相关外设已经正确启动;否则可能导致未定义行为。 - 不同型号的 MCU 对于相同功能可能有不同的实现细节,请仔细查阅官方手册中的描述。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值