这个头文件 stm32f10x_gpio.h
是 STM32 标准外设库的一部分,包含与 GPIO(通用输入/输出)相关的定义、数据类型、宏和函数声明。该文件的结构和功能可以按以下部分来分析:
文件头部信息
文件头部包含文件名、作者、版本和日期等基本信息,还有一段版权声明,表明 STM32 提供的固件库仅供参考,并不承担因使用该固件库导致的任何责任。
预处理器指令
#ifndef __STM32F10x_GPIO_H
#define __STM32F10x_GPIO_H
#ifdef __cplusplus
extern "C" {
#endif
这些指令防止了头文件的递归包含,并确保在 C++ 编译器中正确处理。
引入其他头文件
#include "stm32f10x.h"
引入主设备头文件 stm32f10x.h
,其中包含了设备寄存器的定义和其他必要的基础定义。
数据类型定义
定义了 GPIO 模块中用到的数据类型,包括结构体、枚举类型等:
枚举类型
-
GPIO 速度类型:
typedef enum { GPIO_Speed_10MHz = 1, GPIO_Speed_2MHz, GPIO_Speed_50MHz } GPIOSpeed_TypeDef;
-
GPIO 模式类型:
typedef enum { GPIO_Mode_AIN = 0x0, GPIO_Mode_IN_FLOATING = 0x04, GPIO_Mode_IPD = 0x28, GPIO_Mode_IPU = 0x48, GPIO_Mode_Out_OD = 0x14, GPIO_Mode_Out_PP = 0x10, GPIO_Mode_AF_OD = 0x1C, GPIO_Mode_AF_PP = 0x18 } GPIOMode_TypeDef;
-
BitAction 枚举类型:
typedef enum { Bit_RESET = 0, Bit_SET } BitAction;
结构体类型
- GPIO 初始化结构体:
typedef struct { uint16_t GPIO_Pin; GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; } GPIO_InitTypeDef;
宏定义
-
检查 GPIO 引脚的宏:
#define IS_GPIO_ALL_PERIPH(PERIPH) ... #define IS_GPIO_PIN(PIN) ...
-
GPIO 引脚定义:
#define GPIO_Pin_0 ((uint16_t)0x0001) #define GPIO_Pin_1 ((uint16_t)0x0002) ... #define GPIO_Pin_All ((uint16_t)0xFFFF)
-
GPIO 重新映射定义:
#define GPIO_Remap_SPI1 ((uint32_t)0x00000001) ...
函数声明
头文件中声明了与 GPIO 操作相关的各种函数,这些函数在实现文件中定义。主要包括:
-
初始化和配置函数:
void GPIO_DeInit(GPIO_TypeDef* GPIOx); void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
-
读写操作函数:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx); void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
-
其他功能函数:
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState); void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
文件尾部
在文件尾部,关闭了 C++ 兼容性支持,并结束了防止递归包含的预处理器指令。
#ifdef __cplusplus
}
#endif
#endif /* __STM32F10x_GPIO_H */
总结
这个头文件定义了 STM32F10x 系列微控制器中 GPIO 模块的所有必要数据类型、宏和函数原型。开发人员通过包含该头文件,可以方便地进行 GPIO 配置和操作。