STM32--GPIO
教程
视频
博主教程
STM32系统结构图
GPIO
GPIO(General Purpose Input/Output)是STM32内部的一种外设。
一个STM32芯片内存在多个GPIO外设,每个GPIO外设有16个引脚;
比如GPIOA:PA0~PA15;
GPIOB:PB0~PB15。
每个IO引脚都有输入电路和输出电路。
GPIO8种工作模式
链接
输入模式
由上下拉电阻控制。
上拉模式如何保持高电平
工作原理:
-
当配置为上拉模式时,GPIO内部会连接一个上拉电阻(通常约30-50kΩ)到VDD
-
当没有外部信号驱动时,上拉电阻会将引脚电压拉至高电平
VDD(正电源)
下拉模式如何保持低电平
工作原理:
-
当配置为下拉模式时,GPIO内部会连接一个下拉电阻(通常约30-50kΩ)到GND
-
当没有外部信号驱动时,下拉电阻会将引脚电压拉至低电平
VSS(负电源/地)
输出模式
由正负半导体控制 。
MOS
MOS(金属氧化物半导体)。
PMOS中的"P"
-
P代表Positive(正)
-
当输出高电平时导通
NMOS中的"N"
-
N代表Negative(负)
-
当输出低电平时导通
推挽输出
1上高,0下低;
开漏输出
PMOS断开,无效,只有NMOS在工作。
通用和服用输出
复用输出模式,与通用输出模式很是类似。只是输出的高低电平的来源,不是写程序让CPU直接写输出数据到寄存器,取而代之利用片上(stm32芯片上的)外设模块的复用功能输出来决定的。
GPIO编程控制步骤
1,使用RCC开启GPIO的时钟;
2,使用GPIO_Init()函数初始化GPIO;
3,使用输出/输出函数控制GPIO口。
GPIO的库函数
设置GPIO引脚电平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置指定GPIO端口的单个或多个引脚为高电平(置1)
参数:
-
GPIOx
:GPIO端口(如GPIOA、GPIOB等) -
GPIO_Pin
:要设置的引脚(可使用|
组合多个引脚)
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置指定GPIO端口的单个或多个引脚为低电平(置0)
参数:
-
GPIOx
:GPIO端口 -
GPIO_Pin
:要清除的引脚(可使用|
组合多个引脚)
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
功能:设置指定GPIO端口的单个引脚状态
参数:
-
GPIOx
:GPIO端口 -
GPIO_Pin
:要设置的引脚(只能单个引脚) -
BitVal
:引脚状态(Bit_SET
或Bit_RESET
)
// 设置GPIOC的Pin4为高电平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_SET);// 设置GPIOC的Pin4为低电平
GPIO_WriteBit(GPIOC, GPIO_Pin_4, Bit_RESET);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
功能:一次性设置整个GPIO端口的输出状态
参数:
-
GPIOx
:GPIO端口 -
PortVal
:16位值,表示所有引脚的状态(每个bit对应一个引脚)
// 设置GPIOA所有引脚状态:Pin0=1, Pin1=0, Pin2=1, 其他=0
GPIO_Write(GPIOA, 0x0005); // 二进制 0000 0000 0000 0101
获取引脚输入/输出电平
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);