学习和使用任何一款MCU,最初开始往往都是从GPIO入手的,学会如何配置IO,能让IO输出想要的电平状态,能读取IO口的电平。
本篇介绍一下STM32的GPIO。
GPIO(General-Purpose input/output):通用输入输出端口的简称,是MCU与外部通信的通道。
对于Cortex-M3的系列MCU,比如 STM32F103 它的GPIO总共有八种模式:
按输入:
(1)GPIO_Mode_AIN 模拟输入
(2)GPIO_Mode_IN_FLOATING 浮空输入
(3)GPIO_Mode_IPD 下拉输入
(4)GPIO_Mode_IPU 上拉输入
按输出:
(1)GPIO_Mode_Out_OD 开漏输出
(2)GPIO_Mode_Out_PP 推挽输出
(3)GPIO_Mode_AF_OD 复用开漏输出
(4)GPIO_Mode_AF_PP 复用推挽输出
这些模式分别有什么作用,建议大家去查阅STM32的中文参考手册,里面有比较详细的介绍。本文主要介绍怎么通过 CUBEMX 使用GPIO达到我们需要的效果。
一、GPIO输出配置
我所用的板子有两个LED,所以就用这两个LED作为演示。LED的原理图连接如下:
在 MCU 上的连接如下:
从图中可以看到 LEDO --> PB5,LED1 --> PE5,并且IO输出低电平时LED亮起,输出高电平时LED熄灭。
(1)创建一个工程,并选择 Pinout & Configuration :
(2)找到对应的GPIO标号,点击一下会有一个下拉框:
这里面的选项是决定把GPIO配置为什么功能。
我这里把GPIO设置为输出模式,选择 GPIO_Output 即可。
(3)设置GPIO的选项。如下图:
(4)配置好以后GPIO还是不能输出的,要在代码中加些代码,如下:
二、GPIO输入配置
(1)输入的GPIO就选 PF1,输入配置如下:
(2)相应的配置如下:
(3)读取IO的电平状态:
IO电平的状态读取需要用到的 API 函数:
HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
如下:
HAL_GPIO_ReadPin(GPIOF, GPIO_Pin_7);
以上就是GPIO的输入/输出的配置和使用。