STM32 GPIO 接口:配置、控制和示例代码
STM32 的 GPIO 接口(General Purpose Input/Output)是一种灵活的通用输入输出接口,可以通过软件配置来实现多种输入输出功能,例如控制 LED 灯、读取按键、控制电机、外设通讯等。
在 STM32 微控制器中,GPIO 口通常被分为多个端口,每个端口包含多个引脚。例如,STM32F407VG 微控制器包含 5 个 GPIO 端口:GPIOA、GPIOB、GPIOC、GPIOD 和 GPIOE,每个端口包含 16 个引脚。
STM32 的 GPIO 接口可以通过寄存器进行配置和控制。常用的寄存器包括:
- GPIOx_MODER:控制 GPIO 口的输入输出模式。
- GPIOx_OTYPER:控制 GPIO 口输出类型,可以选择推挽输出或开漏输出。
- GPIOx_OSPEEDR:控制 GPIO 口输出速度。
- GPIOx_PUPDR:控制 GPIO 口上下拉电阻。
- GPIOx_IDR:读取 GPIO 口输入数据。
- GPIOx_ODR:设置 GPIO 口输出数据。
使用 GPIO 接口时,一般需要先初始化 GPIO 口的模式、输出类型、输出速度、上下拉电阻等参数。然后,可以通过读取输入数据和设置输出数据来控制 GPIO 口的状态。例如,控制一个 LED 灯可以通过将 GPIO 口配置为输出模式,然后设置 GPIO 口输出高电平或低电平来实现。
下面是一个在 STM32F407VG 微控制器上控制 LED 灯的示例代码:
#include "stm32f4xx.h"
int main(void) {
// 初始化 GPIO 口
RCC->AHB1ENR |= RCC_AHB1ENR_GPIOBEN; // 使能 GPIOB 时钟
GPIOB->MODER |= GPIO_MODER_MODE0_0; // 将 PB0 配置为输出模式
GPIOB->OTYPER &= ~GPIO_OTYPER_OT0; // 将 PB0 配置为推挽输出
GPIOB->OSPEEDR |= GPIO_OSPEEDR_OSPEED0_0; // 将 PB0 输出速度设置为低速
GPIOB->PUPDR &= ~GPIO_PUPDR_PUPD0; // 将 PB0 上下拉电阻禁用
// 循环控制 LED 灯闪烁
while (1) {
GPIOB->BSRR |= GPIO_BSRR_BS0; // 将 PB0 输出高电平,LED 灯亮
for (int i = 0; i < 1000000; i++); // 延时
GPIOB->BSRR |= GPIO_BSRR_BR0; // 将 PB0 输出低电平,LED 灯灭
for (int i = 0; i < 1000000; i++); // 延时
}
}
原文地址: https://www.cveoy.top/t/topic/nH0V 著作权归作者所有。请勿转载和采集!