STM32 I_O接口详解:掌握外设控制的精髓,让单片机灵活自如
发布时间: 2024-07-02 16:23:56 阅读量: 103 订阅数: 39 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![PDF](https://csdnimg.cn/release/download/static_files/pc/images/minetype/PDF.png)
STM32中如何配置片内外设使用的IO端口
![STM32 I_O接口详解:掌握外设控制的精髓,让单片机灵活自如](https://img-blog.csdnimg.cn/0c4421a75e8147f4bb72f25fad5eb316.png)
# 1. STM32 I/O 接口基础**
STM32 I/O 接口是单片机与外部世界交互的关键桥梁,其主要功能是控制和读取外部设备。本章将介绍 STM32 I/O 接口的基础知识,包括 I/O 引脚结构、模式配置和中断机制。
### I/O 引脚结构
STM32 的 I/O 引脚分为多个端口,每个端口包含多个引脚。每个引脚都有一个唯一的引脚编号和功能引脚映射,用于连接到特定的外设或功能。引脚的电气特性,如输入/输出能力、驱动能力和速度,可以通过寄存器进行配置。
### 模式配置
STM32 I/O 引脚可以配置为不同的模式,包括输入模式、输出模式、模拟模式和复用模式。输入模式允许引脚接收外部信号,输出模式允许引脚输出信号,模拟模式允许引脚连接到模拟外设,复用模式允许引脚同时连接到多个外设。
# 2. GPIO 编程技巧
### 2.1 GPIO 模式和配置
#### 2.1.1 GPIO 模式
STM32 的 GPIO 具有多种模式,可用于不同的功能。这些模式包括:
- **输入模式 (Input)**:GPIO 引脚配置为从外部设备接收信号。
- **输出模式 (Output)**:GPIO 引脚配置为向外部设备发送信号。
- **推挽模式 (Push-Pull)**:GPIO 引脚在输出模式下工作,可以输出高电平或低电平。
- **开漏模式 (Open-Drain)**:GPIO 引脚在输出模式下工作,但只能输出低电平。
- **模拟模式 (Analog)**:GPIO 引脚配置为模拟输入或输出。
#### 2.1.2 GPIO 配置寄存器
GPIO 模式和配置通过以下寄存器进行设置:
- **GPIO 模式寄存器 (MODER)**:设置 GPIO 引脚的模式。
- **GPIO 输出类型寄存器 (OTYPER)**:设置 GPIO 引脚的输出类型(推挽或开漏)。
- **GPIO 速度寄存器 (OSPEEDR)**:设置 GPIO 引脚的输出速度。
- **GPIO 上拉/下拉寄存器 (PUPDR)**:设置 GPIO 引脚的上拉或下拉电阻。
### 2.2 GPIO 中断处理
#### 2.2.1 中断配置
STM32 的 GPIO 可以配置为在特定事件发生时触发中断。这些事件包括:
- **上升沿触发**:当 GPIO 引脚从低电平变为高电平时触发中断。
- **下降沿触发**:当 GPIO 引脚从高电平变为低电平时触发中断。
- **电平触发**:当 GPIO 引脚保持高电平或低电平时触发中断。
中断配置通过以下寄存器进行设置:
- **GPIO 中断使能寄存器 (EXTICR)**:选择 GPIO 引脚与中断线关联。
- **GPIO 中断上升沿触发寄存器 (RTSR)**:使能 GPIO 引脚的上升沿触发中断。
- **GPIO 中断下降沿触发寄存器 (FTSR)**:使能 GPIO 引脚的下降沿触发中断。
- **GPIO 中断电平触发寄存器 (LTSR)**:使能 GPIO 引脚的电平触发中断。
#### 2.2.2 中断服务函数
当 GPIO 中断触发时,会执行与该中断关联的中断服务函数 (ISR)。ISR 负责处理中断事件并采取适当的措施。
ISR 通常包含以下步骤:
- **清除中断标志**:清除 GPIO 中断标志寄存器,以指示中断已处理。
- **读取 GPIO 输入状态**:读取 GPIO 输入寄存器,以确定触发中断的引脚。
- **执行中断处理**:根据触发中断的引脚执行适当的操作。
- **返回**:返回主程序。
### 2.3 GPIO 高级应用
#### 2.3.1 GPIO 扩展功能
除了基本 I/O 功能外,STM32 的 GPIO 还支持多种扩展功能,包括:
- **外部中断**:GPIO 引脚可配置为外部中断源,以触发中断控制器。
- **定时器输入/输出**:GPIO 引脚可配置为定时器的输入或输出引脚。
- **PWM 输出**:GPIO 引脚可配置为脉宽调制 (PWM) 输出,以产生可变占空比的脉冲。
- **模拟输入**:GPIO 引脚可配置为模拟输入,以连接外部模拟信号。
#### 2.3.2 GPIO 驱动能力和速度配置
STM32 的 GPIO 具有可配置的驱动能力和速度设置,以优化其性能。
- **驱动能力**:GPIO 引脚的驱动能力可以配置为低、中或高,以控制其输出电流。
- **速度**:GPIO 引脚的速度可以配置为低、中或高,以控制其开关速度。
驱动能力和速度配置通过以下寄存器进行设置:
- **GPIO 驱动能力寄存器 (ODR)**:设置 GPIO 引脚的驱动能力。
- **GPIO 速度寄存器 (OSPEEDR)**:设置 GPIO 引脚的速度。
# 3. 外设接口编程
### 3.1 UART 接口
UART(通用异步收发传输器)是一种串行通信接口,广泛用于单片机与外部设备(如计算机、蓝牙模块)之间的通信。
#### 3.1.1 UART 初始化和配置
UART 初始化主要包括以下步骤:
- **时钟配置:**为 UART 外设使能时钟。
- **引脚配置:**将特定的 GPIO 引脚配置为 UART 功能。
- **波特率设置:**设置 UART 的波特率,即每秒传输的比特数。
- **数据格式设置:**配置数据位、停止位和奇偶校验位。
```c
// STM32F103C8T6 芯片 UART1 初始化
void UART1_Init(void) {
// 使能 UART1 时钟
RCC->APB2ENR |= RCC_APB2ENR_USART1EN;
// 配置 GPIO 引脚 PA9 和 PA10 为 UART1 功能
GPIOA->CRH &= ~(GPIO_CRH_CNF9 | GPIO_CRH_CNF10);
GPIOA->CRH |= GPIO_CRH_CNF9_1 | GPIO_CRH_CNF10_1;
// 设置波特率为 9600
UART1->BRR = 0x341;
// 设置数据格式:8 数据位,1 停止位,无奇偶校验
UART1->CR1 &= ~(UART_CR1_M | UART_CR1_PCE | UART_CR1_PS);
}
```
#### 3.1.2 UART 数据传输
UART 数据传输可以通过以下步骤实现:
- **发送数据:**将数据写入 UART 数据寄存器(UART_DR)。
- **接收数据:**从 UART 数据寄存器(UART_DR)读取数据。
```c
// 发送一个字符
void UART1_SendChar(uint8_t data) {
// 等待发送寄存器为空
while (!(UART1->SR & UART_SR_TXE)) {}
// 写入数据到发送寄存器
UART1->DR = d
```
0
0
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)