PAGE1
PAGE1
STM32F4系列GPIO与中断
GPIO概述
STM32F4系列单片机的GPIO(GeneralPurposeInput/Output,通用输入输出)端口是用于控制外部设备的数字输入和输出端口。GPIO端口具有高度的灵活性,可以配置为多种工作模式,包括输入、输出、复用功能和中断功能。每个GPIO端口都包含16个引脚,可以独立配置。STM32F4的GPIO端口分为多个端口,如GPIOA、GPIOB、GPIOC等,每个端口都有专门的寄存器来控制其工作模式和状态。
GPIO寄存器
GPIO端口的主要寄存器包括:
MODER(ModeRegister):模式寄存器,用于配置每个引脚的工作模式。
OTYPER(OutputTypeRegister):输出类型寄存器,用于配置每个引脚的输出类型(推挽或开漏)。
OSPEEDR(OutputSpeedRegister):输出速度寄存器,用于配置每个引脚的输出速度。
PUPDR(Pull-up/Pull-downRegister):上拉/下拉寄存器,用于配置每个引脚的上拉或下拉电阻。
**IDR**(InputDataRegister):输入数据寄存器,用于读取每个引脚的当前输入状态。
**ODR**(OutputDataRegister):输出数据寄存器,用于设置每个引脚的输出状态。
BSRR(BitSet/ResetRegister):位设置/复位寄存器,用于直接设置或清除某个引脚的状态。
LCKR(ConfigurationLockRegister):配置锁寄存器,用于锁定GPIO配置,防止意外更改。
AFR(AlternateFunctionRegister):复用功能寄存器,用于配置每个引脚的复用功能。
GPIO模式配置
GPIO引脚可以配置为以下几种模式:
输入模式:包括浮空输入、上拉输入和下拉输入。
输出模式:包括推挽输出和开漏输出,支持多种输出速度。
复用功能模式:用于配置引脚为特定的外设功能,如USART、SPI、I2C等。
模拟模式:用于配置引脚为模拟输入或输出,常用于ADC或DAC。
GPIO配置步骤
使能GPIO时钟:通过RCC(ResetandClockControl)寄存器使能相应的GPIO端口时钟。
配置GPIO模式:通过MODER寄存器设置引脚的工作模式。
配置输出类型:通过OTYPER寄存器设置引脚的输出类型。
配置输出速度:通过OSPEEDR寄存器设置引脚的输出速度。
配置上拉/下拉:通过PUPDR寄存器设置引脚的上拉或下拉电阻。
配置复用功能:通过AFR寄存器设置引脚的复用功能。
代码示例:配置GPIO引脚为输出模式
下面是一个配置GPIOA端口的第5引脚为推挽输出模式的示例代码:
#includestm32f4xx.h
voidGPIO_Config(void){
//1.使能GPIOA时钟
RCC-AHB1ENR|=RCC_AHB1ENR_GPIOAEN;
//2.配置GPIOA的第5引脚为推挽输出模式
GPIOA-MODER=~(0x3(5*2));//清除第5引脚的模式位
GPIOA-MODER|=(0x1(5*2));//设置第5引脚为输出模式
//3.配置输出类型为推挽
GPIOA-OTYPER=~(0x15);//清除第5引脚的输出类型位
//4.配置输出速度为高速
GPIOA-OSPEEDR=~(0x3(5*2));//清除第5引脚的输出速度位
GPIOA-OSPEEDR|=(0x3(5*2));//设置第5引脚为高速输出
//5.配置上拉/下拉为无
GPIOA-PUPDR=~(0x3(5*2));//清除第5引脚的上拉/下拉位
GPIOA-PUPDR|=(0x0(5*2));//设置第5引脚为无上拉/下拉
}
intmain(void){
GPIO_Config();//配置GPIO
while(1){
//设置GPIOA的第5引脚为高电平
GPIOA-BSRR=(0x15);
//延时
for(volatileinti=0;i1000000;i++);
//设置GPIOA的第5引脚为低电