STM32 GPIO使用超强总结 下载本文

内容发布更新时间 : 2024/5/23 17:06:04星期一 下面是文章的全部内容请认真阅读。

STM32 GPIO使用

操作步骤:

1. 使能GPIO对应的外设时钟

例如://使能GPIOA、GPIOB、GPIOC对应的外设时钟

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC , ENABLE);

2. 声明一个GPIO_InitStructure结构体

例如:

GPIO_InitTypeDef GPIO_InitStructure;

3. 选择待设置的GPIO管脚

例如://选择待设置的GPIO第7、8、9管脚位,中间加“|”符号

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;

4. 设置选中GPIO管脚的速率

例如://设置选中GPIO管脚的速率为最高速率2MHz

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //最高速率2MHz

5. 设置选中GPIO管脚的模式

例如://设置选中GPIO管脚的模式为GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //开漏输出模式

6. 根据GPIO_InitStructure中指定的参数初始化外设GPIOX

例如: GPIO_Init(GPIOC, &GPIO_InitStructure);

7.其他应用

例: 将端口GPIOA的第10、15脚置1(高电平)

GPIO_SetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

例:将端口GPIOA的第10、15脚置0(低电平)

GPIO_ResetBits(GPIOA, GPIO_Pin_10 | GPIO_Pin_15);

开漏输出模式1 / 17

GPIO寄存器:

寄存器 描述

CRL 端口配置低寄存器

CRH 端口配置高寄存器

IDR 端口输入数据寄存器

ODR 端口输出数据寄存器

BSRR 端口位设置/复位寄存器

BRR 端口位复位寄存器

LCKR 端口配置锁定寄存器

EVCR 事件控制寄存器

MAPR 复用重映射和调试

I/O 配置寄存器

EXTICR 外部中断线路0-15配置寄存器

GPIO库函数:

函数名 描述

GPIO_DeInit 将外设GPIOx寄存器重设为缺省值

GPIO_AFIODeInit 将复用功能(重映射事件控制和EXTI设置)重设为缺省值

GPIO_Init 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器

GPIO_StructInit 把GPIO_InitStruct中的每一个参数按缺省值填入

GPIO_ReadInputDataBit 读取指定端口管脚的输入

GPIO_ReadInputData 读取指定的GPIO端口输入

GPIO_ReadOutputDataBit 读取指定端口管脚的输出

GPIO_ReadOutputData 读取指定的GPIO端口输出

2 / 17

GPIO_SetBits 设置指定的数据端口位

GPIO_ResetBits 清除指定的数据端口位

GPIO_WriteBit 设置或者清除指定的数据端口位

GPIO_Write 向指定GPIO数据端口写入数据

GPIO_PinLockConfig 锁定GPIO管脚设置寄存器

GPIO_EventOutputConfig 选择GPIO管脚用作事件输出

GPIO_EventOutputCmd 使能或者失能事件输出

GPIO_PinRemapConfig 改变指定管脚的映射

GPIO_EXTILineConfig 选择GPIO管脚用作外部中断线路

库函数: 函数GPIO_DeInit

功能描述:将外设GPIOx寄存器重设为缺省值 例:

GPIO_DeInit(GPIOA);

函数GPIO_AFIODeInit

功能描述:将复用功能(重映射事件控制和EXTI设置)重设为缺省值 例:

GPIO_AFIODeInit();

函数GPIO_Init

功能描述:根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 例:

GPIO_InitTypeDef GPIO_InitStructure;

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA, &GPIO_InitStructure);

3 / 17