LOADING

加载过慢请开启缓存 浏览器默认开启

STM32标准库GPIO

2024/3/27 STM32 STM32

STM32标准库GPIO

作为STM32最基本的外设,GPIO最基本的输出功能是由STM32控制 引脚输出高低电平,比如可以把GPIO接LED灯来控制其亮灭,
也可以接继电器或者三极管,通过继电器或三极管来控制外部大功率电路的通断。

这是大概到结构图,看的懂就看,看不懂就算了。

STM32一共是有8种模式
输入模式:
(1)GPIO_Mode_IN_FLOATING 浮空输入
(2)GPIO_Mode_IPU 上拉输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_AIN 模拟输入
输出模式:
(5)GPIO_Mode_Out_OD 开漏输出(带上拉或者下拉)
(6)GPIO_Mode_AF_OD 复用开漏输出(带上拉或者下拉)
(7)GPIO_Mode_Out_PP 推挽输出(带上拉或者下拉)
(8)GPIO_Mode_AF_PP 复用推挽输出(带上拉或者下拉)

先来介绍输出模式

在开漏输出模式时,只有N-MOS管工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,
I/O端口的电平就是低电平,若控制输出为1时,高电平,则P-MOS管和N-MOS管都关闭,输出指令就不会起到作用,
此时I/O端口的电平就不会由输出的高电平决定,而是由I/O端口外部的上拉或者下拉决定 如果没有上拉或者下拉 IO口就处于悬空状态

(省流,能输出大电流,但是可能会短路)

在推挽输出模式时,N-MOS管和P-MOS管都工作,如果我们控制输出为0,低电平,则P-MOS管关闭,N-MOS管导通,使输出低电平,
I/O端口的电平就是低电平,若控制输出为1 高电平,则P-MOS管导通N-MOS管关闭,使输出高电平,I/O端口的电平就是高电平,
外部上拉和下拉的作用是控制在没有输出时IO口电平
(省流,只能输入弱电流,需要上拉可以保护避免短路)

输入模式
上拉就是悬空就是高电平
下拉就是悬空就是低电平
浮空输入就是不上拉不下拉,容易干扰

下面内容建议配合代码查看(stm32f103c8t6)
配置GPIO步骤

1 开启gpio时钟
2 配置GPIO初始化
3 调用

开启gpio时钟

而相对应的外设功能所使用的时钟 在stm32f4xx.h 中即可查看到

1
RCC_AHB1PeriphClockCmd ( RCC_AHB1Periph_GPIOX, ENABLE);     /*开启 AHB1时钟*/

X是选择引脚组
ENABLE开
DISABLE 关

RCC_AHB1

RCC_APB1

配置GPIO初始化

1
GPIO_Init(GPIOX, &GPIO_InitStructure);    //初始化所设置的引脚

X是初始化引脚组为ABCD等组
GPIO_InitStructure 是结构体
用于初始化

1
GPIO_InitTypeDef GPIO_InitStruct;                    //定义初始化结构体

定义完结构体后就可以对结构体进行配置

GPIO_InitStruct.GPIO_Mode    = x;     //配置模式模式上面有
GPIO_InitStruct.GPIO_Pin     = GPIO_Pin_X;           //配置哪个IO口一共有1到16个引脚
GPIO_InitStruct.GPIO_Speed   = GPIO_Speed_xMHz;     //配置IO口速度,仅输出有效

gpio的速度

调用

输出

1
GPIO_ResetBits(GPIOX, GPIO_Pin_X);  //X组,x引脚  gpio引脚低电平
1
GPIO_SetBits(GPIOX, GPIO_Pin_X);  //X组,x引脚  gpio引脚高电平
1
GPIO_SetBits(GPIOX, GPIO_Pin_X);  //X组,x引脚  gpio引脚高电平
1
GPIO_WriteBit(GPIOX, GPIO_Pin_X, Bit_RESET);//X组,x引脚  gpio引脚低电平
1
GPIO_WriteBit(GPIOX, GPIO_Pin_X,  Bit_SET);//X组,x引脚  gpio引脚高电平
1
GPIO_WriteBit(GPIOX, GPIO_Pin_X, X);//X组,x引脚 X可以为高低电平

输入

1
GPIO_ReadInputDataBit(GPIOX, GPIO_Pin_X) //X为组 X为引脚

这个就可以检测高低电平用if判断上面的函数为1或者0就是高或者低

参考工程:
https://wwm.lanzouq.com/b03lno3za
密码:6jed