STM32 GPIO编程实战:引脚配置、输入输出控制和中断处理秘籍
发布时间: 2024-07-02 05:56:04 阅读量: 51 订阅数: 10 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![STM32 GPIO编程实战:引脚配置、输入输出控制和中断处理秘籍](https://img-blog.csdnimg.cn/7d9ec37edb704112bb9590841b7802f3.png)
# 1. STM32 GPIO基础**
STM32微控制器中的通用输入输出(GPIO)外设提供了一种与外部世界交互的灵活方式。GPIO引脚可配置为输入或输出,并具有各种功能,例如中断和模拟输入。
GPIO外设由寄存器集控制,这些寄存器用于配置引脚模式、输出类型和上拉/下拉电阻。了解这些寄存器的功能对于有效使用GPIO至关重要。
本章将介绍STM32 GPIO基础知识,包括引脚配置、输入输出控制和中断处理。
# 2. GPIO引脚配置
GPIO引脚配置是STM32 GPIO编程的基础,它决定了引脚的工作模式和电气特性。本章节将详细介绍STM32 GPIO引脚配置的各个方面,包括引脚模式配置、引脚输出类型配置和引脚上拉/下拉配置。
### 2.1 引脚模式配置
引脚模式配置决定了引脚的工作模式,包括输入、输出、模拟输入、复用功能等。STM32 GPIO引脚的模式配置通过GPIO寄存器中的MODER寄存器进行设置。
MODER寄存器有两种模式配置位:
- **MODER[1:0]**:配置引脚模式,00表示输入模式,01表示输出模式,10表示复用功能模式,11表示模拟输入模式。
- **MODER[3:2]**:配置引脚模式,同上。
例如,要将GPIOA的第5引脚配置为输出模式,需要将GPIOA->MODER寄存器的第5和第6位设置为01:
```c
// 将GPIOA的第5引脚配置为输出模式
GPIOA->MODER &= ~(3 << (5 * 2)); // 清除第5和第6位
GPIOA->MODER |= (1 << (5 * 2)); // 设置第5位为1
```
### 2.2 引脚输出类型配置
引脚输出类型配置决定了引脚输出信号的类型,包括推挽输出、开漏输出和模拟输出。STM32 GPIO引脚的输出类型配置通过GPIO寄存器中的OTYPER寄存器进行设置。
OTYPER寄存器有一个输出类型配置位:
- **OTYPER[x]**:配置引脚输出类型,0表示推挽输出,1表示开漏输出。
例如,要将GPIOA的第5引脚配置为开漏输出,需要将GPIOA->OTYPER寄存器的第5位设置为1:
```c
// 将GPIOA的第5引脚配置为开漏输出
GPIOA->OTYPER |= (1 << 5);
```
### 2.3 引脚上拉/下拉配置
引脚上拉/下拉配置决定了引脚在输入模式下的默认电平,包括上拉、下拉和浮空。STM32 GPIO引脚的上拉/下拉配置通过GPIO寄存器中的PUPDR寄存器进行设置。
PUPDR寄存器有两个上拉/下拉配置位:
- **PUPDR[1:0]**:配置引脚上拉/下拉,00表示浮空,01表示上拉,10表示下拉,11保留。
- **PUPDR[3:2]**:配置引脚上拉/下拉,同上。
例如,要将GPIOA的第5引脚配置为上拉,需要将GPIOA->PUPDR寄存器的第5和第6位设置为01:
```c
// 将GPIOA的第5引脚配置为上拉
GPIOA->PUPDR &= ~(3 << (5 * 2)); // 清除第5和第6位
GPIOA->PUPDR |= (1 << (5 * 2)); // 设置第5位为1
```
通过对引脚模式、输出类型和上拉/下拉的配置,可以灵活地控制STM32 GPIO引脚的工作特性,满足不同的应用需求。
# 3. GPIO输入输出控制
### 3.1 GPIO输入输出操作
GPIO输入输出操作是GPIO的基本功能之一。STM32系列MCU提供了丰富的GPIO输入输出操作寄存器,包括数据寄存器、输出寄存器和输入寄存器。
**数据寄存器(GPIOx_ODR)**:用于读取或写入GPIO引脚的电平状态。当引脚配置为输出模式时,写入ODR寄存器可以控制引脚的电平;当引脚配置为输入模式时,读取ODR寄存器可以获取引脚的电平状态。
**输出寄存器(GPIOx_BSRR)**:用于设置或复位GPIO引脚的电平。BSRR寄存器有两个32位的位域,分别用于设置(BSRR_BS)和复位(BSRR_BR)GPIO引脚。当对应位设置为1时,则相应引脚的电平被置高或置低。
**输入寄存器(GPIOx_IDR)**:用于读取GPIO引脚的电平状态。IDR寄存器是一个32位的只读寄存器,每一位对应一个GPIO引脚。当对应位为1时,则相应引脚的电平为高电平;当对应位为0时,则相应引脚的电平为低电平。
**代码示例:**
```c
/* 设置GPIOA第5引脚为输出模式 */
GPIOA->MODER &= ~(3 << (5 * 2));
GPIOA->MODER |= (1 << (5 * 2));
/* 将GPIOA第5引脚的电平置高 */
GPIOA->BSRR = (1 << 5);
/* 读取GPIOA第5引脚的电平状态 */
uint32_t pin_level = GPIOA->IDR & (1 << 5);
```
### 3.2 GPIO中断处理
GPIO中断是STM32系列MCU提供的另一个重要功能。通过配置GPIO中断,可以实现当GPIO引脚电平发生变化时触发中断服务函数。
**3.2.1 中断配置**
GPIO中断配置主要涉及以下几个步骤:
1. **使能GPIO中断时钟:**在RCC寄存器中使能对应G
0
0
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)