简介
在STM32F103系列的单片机中,GPIO(General Purpose Input/Output)通用输入输出口是非常重要的一个模块。GPIO模块可以实现对外部设备的输入和输出控制,是单片机与外部世界交互的关键接口。本文将详细介绍STM32F103GPIO通用输入输出口的基本原理和用法。
GPIO控制寄存器
STM32F103系列的GPIO模块包含多个控制寄存器,用于配置和控制GPIO口的各种功能。以下是常用的GPIO控制寄存器:
- GPIOx_CRL(x为GPIO的端口号):低8位用于配置GPIO口的模式,高8位用于配置GPIO口的输出速度。
- GPIOx_CRH(x为GPIO的端口号):低8位用于配置GPIO口的输入模式,高8位用于配置GPIO口的输出模式。
- GPIOx_IDR(x为GPIO的端口号):输入数据寄存器,用于读取GPIO口的输入电平。
- GPIOx_ODR(x为GPIO的端口号):输出数据寄存器,用于设置GPIO口的输出电平。
GPIO引脚配置
每个GPIO引脚都可以通过相应的控制寄存器进行配置。以下是GPIO引脚的常用配置:
- 模式配置:可以选择输入模式(如浮空输入、上拉输入)或输出模式(如推挽输出、开漏输出)。
- 速度配置:可选择输出速度(如2MHz、10MHz、50MHz)。
- 上下拉配置:对于输入模式,可以选择上拉或下拉电阻;对于输出模式,可以选择是使能或禁用上拉或下拉电阻。
GPIO口的输入
通过读取GPIOx_IDR寄存器,可以获取GPIO口的输入电平。以下是GPIO口输入的基本步骤:
- 配置GPIO口为输入模式。
- 读取GPIOx_IDR寄存器,获取输入电平。
GPIO口的输出
通过设置GPIOx_ODR寄存器,可以设置GPIO口的输出电平。以下是GPIO口输出的基本步骤:
- 配置GPIO口为输出模式。
- 设置GPIOx_ODR寄存器,设置输出电平。
示例代码
以下是一个简单的示例代码,演示如何使用STM32F103GPIO通用输入输出口:
#include "stm32f10x.h"
void GPIO_Configuration()
{
GPIO_InitTypeDef GPIO_InitStructure;
// 配置GPIOA的引脚2为输出模式,推挽输出,速度为50MHz
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
// 配置GPIOB的引脚0为输入模式,上拉输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
int main()
{
GPIO_Configuration();
// 设置GPIOA的引脚2为高电平
GPIO_SetBits(GPIOA, GPIO_Pin_2);
// 延时
Delay(1000);
// 设置GPIOA的引脚2为低电平
GPIO_ResetBits(GPIOA, GPIO_Pin_2);
while(1)
{
// 读取GPIOB的引脚0的电平
if(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_0) == RESET)
{
// GPIOB的引脚0的电平为低
// 执行相应的操作
}
// 延时
Delay(1000);
}
}
结语
STM32F103GPIO通用输入输出口是STM32F103系列单片机的重要功能模块,通过GPIO口的配置和控制,可以实现对外部设备的输入和输出控制。希望本文对你理解STM32F103GPIO通用输入输出口有所帮助。
本文来自极简博客,作者:狂野之心,转载请注明原文链接:STM32F103GPIO通用输入输出口