从零开始学stm32(二)
介绍完stm32后,开始正式学习stm32了。这里就不多对工程的创建描述了,想了解的可以参考网上的工程创建视频。学习stm32就少不了学习stm32的通用IO口模型。主要的内容包括GPIO的基本概念与原理、GPIO寄存器和AFIO。
GPIO基本概念与原理
GPIO称为通用输入输出接口,它的电平一般在3.3V,很多GPIO口兼容5V,每个GPIO引脚都可以通过软件的方式进行配置,实现不同的功能。通常一个GPIO引脚对应两个寄存器:输入寄存器和输出寄存器(用于配置不同功能模式)。
I/O端口结构
GPIO功能与模式
-
输入模式
-
输入模拟
-
浮空输入
-
下拉输入
-
上拉输入
当IO口配置为浮空上拉/下拉输入时:
- 输出驱动器被禁止
- 施密特触发输入(TTL肖特基触发器)被激活
- 根据输入配置(上拉,下拉或浮空)不同,弱上拉和若下拉电阻被连接
- GPIO引脚上数据在每个APB2时钟被采样到输入数据寄存器
- 对输入数据寄存器的访问可得到GPIO状态
当IO口配置为模拟输入配置时:
- 输出驱动器被禁止
- 施密特触发输入(TTL肖特基触发器)被禁止
- 弱上拉电阻和弱下拉电阻被禁止
- 读取输入数据寄存器时为0
- 实现每个模拟“IO"引脚上的零消耗
-
-
输出模式
- 开漏输出
- 推挽输出
GPIO寄存器
- CRL、CRH 端口配置低/高寄存器
- IDR、ODR端口数据输入/输出寄存器
- BSRR/BRR端口位设置/清除寄存器
- LCKR 端口配置锁定寄存器
AFIO基本概念与原理
AFIO复用功能输入输出接口
引脚重映射
一个外设的一你骄傲除了默认的端口外,还可以通过设置重映射寄存器的方式,把这个外设的引脚映射到其他端口。
优点
1、充分利用片内资源。
2、方便PCB设计,减少信号交叉干扰。
3、分时复用某些外设,虚拟的增加端口数目。
默认复用与重映射
1、默认复用。只需开启相应的外设功能时钟,无序开启AFIO时钟。
2、重映射。需要开启相应外设是时钟,并且开启AFIO时钟。
GPIO功能的简单应用
对于GPIO口简单应用,常见的就是通过操作GPIO来实现LED灯的亮灭,如跑马灯实验。
使能GPIO的
- 使能外设相对应的时钟总线
- 配置相应的寄存器参数
- 初始化引脚
- 控制与操作GPIO
void LedGpioInit(void)
{
// 定义GPIO的结构体变量
GPIO_InitTypeDef GPIO_InitStruct = {0};
// 使能LED的GPIO对应的时钟
B_LED_GPIO_CLK_EN();
GPIO_InitStruct.Pin = B_LED_GPIO_PIN; // 选择LED的引脚
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; // 设置为推挽输出模式
GPIO_InitStruct.Pull = GPIO_PULLUP; // 默认上拉
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; // 引脚输出速度设置为慢
// 初始化引脚配置
HAL_GPIO_Init(B_LED_GPIO_PORT, &GPIO_InitStruct);
// 默认LED灭:OFF-灭,ON-亮
BLED(OFF);
}