LIB1:RCC和GPIO固件库

1. RCC固件库

1.1 stm32f10x_rcc.h

    * @file    stm32f10x_rcc.h
    * @brief   本文件包含 RCC 固件库的所有函数原型

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);

1.2 stm32f10x_rcc.c

  * @file    stm32f10x_rcc.c
  * @brief   本文件提供所有 RCC 固件函数。

/**
  * @brief  使能或禁用高速 APB(APB2)外设时钟。
  * @param  RCC_APB2Periph: 指定需要控制时钟的 APB2 外设。
  * @param  NewState: 指定外设时钟的新状态。
  *   此参数可以是:ENABLE(使能)或 DISABLE(禁用)。
  * @retval 无
  */
  
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)

2. GPIO固件库

2.1 stm32f10x_gpio.h

  * @file    stm32f10x_gpio.h
  * @brief   本文件包含 GPIO 固件库的所有函数原型。

2.1.1 变量声明

/** 
  * @brief  配置模式枚举类型  
  */

typedef enum
{ 
  GPIO_Mode_AIN = 0x0,        /*!< 模拟输入模式 */
  GPIO_Mode_IN_FLOATING = 0x04, /*!< 浮空输入模式 */
  GPIO_Mode_IPD = 0x28,       /*!< 下拉输入模式(IPD: Input Pull-Down) */
  GPIO_Mode_IPU = 0x48,       /*!< 上拉输入模式(IPU: Input Pull-Up) */
  GPIO_Mode_Out_OD = 0x14,    /*!< 开漏输出模式(OD: Open Drain) */
  GPIO_Mode_Out_PP = 0x10,    /*!< 推挽输出模式(PP: Push-Pull) */
  GPIO_Mode_AF_OD = 0x1C,     /*!< 复用开漏输出模式(AF: Alternate Function) */
  GPIO_Mode_AF_PP = 0x18      /*!< 复用推挽输出模式(AF: Alternate Function) */
}GPIOMode_TypeDef;

/** @defgroup GPIO_pins_define 
  * @{
  */

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< 选择引脚 0 */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< 选择引脚 1 */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< 选择引脚 2 */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< 选择引脚 3 */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< 选择引脚 4 */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< 选择引脚 5 */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< 选择引脚 6 */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< 选择引脚 7 */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< 选择引脚 8 */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< 选择引脚 9 */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< 选择引脚 10 */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< 选择引脚 11 */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< 选择引脚 12 */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< 选择引脚 13 */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< 选择引脚 14 */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< 选择引脚 15 */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< 选择所有引脚 */

/**
  * @}
  */
  
/** 
  * @brief  输出最大频率选择  
  */

typedef enum
{ 
  GPIO_Speed_10MHz = 1,  /*!< 输出最大频率 10MHz */
  GPIO_Speed_2MHz,       /*!< 输出最大频率 2MHz */
  GPIO_Speed_50MHz       /*!< 输出最大频率 50MHz */
}GPIOSpeed_TypeDef;

/** 
  * @brief  GPIO 初始化结构体定义  
  */
typedef struct
{
  uint16_t GPIO_Pin;             /*!< 指定要配置的 GPIO 引脚。
                                      此参数可以是 @ref GPIO_pins_define 中的任意值 */

  GPIOSpeed_TypeDef GPIO_Speed;  /*!< 指定所选引脚的速率。
                                      此参数可以是 @ref GPIOSpeed_TypeDef 中的值 */

  GPIOMode_TypeDef GPIO_Mode;    /*!< 指定所选引脚的工作模式。
                                      此参数可以是 @ref GPIOMode_TypeDef 中的值 */
}GPIO_InitTypeDef;  

/** 
  * @brief  Bit_SET 和 Bit_RESET 枚举类型  
  */

typedef enum
{ 
  Bit_RESET = 0,  /* 复位 */
  Bit_SET         /* 置位 */
}BitAction;

2.1.2 函数声明

// 复位所指定的GPIOx外设
void GPIO_DeInit(GPIO_TypeDef* GPIOx);

// 复位所指定的AFIO外设
void GPIO_AFIODeInit(void);

// 用结构体变量来初始化GPIOx
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);

// 给结构体变量赋一个默认值
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);

// GPIO读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

// GPIO写入函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

2.2 stm32f10x_gpio.c

* @file    stm32f10x_gpio.c
* @brief   本文件提供所有 GPIO 固件函数。

/**
  * @brief  根据 GPIO_InitStruct 中的指定参数,初始化 GPIOx 外设。
  * @param  GPIOx: x 可取值为(A..G),用于选择对应的 GPIO 外设。
  * @param  GPIO_InitStruct: 指向 GPIO_InitTypeDef 结构体的指针,
  *         该结构体包含了指定 GPIO 外设的配置信息。
  * @retval 无
  */
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

/**
  * @brief  设置所选的数据端口位。
  * @param  GPIOx: x 可取值为(A..G),用于选择对应的 GPIO 外设。
  * @param  GPIO_Pin: 指定要写入的端口位。
  *   此参数可以是 GPIO_Pin_x(x 可取值为 0..15)的任意组合。
  * @retval 无
  */
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

/**
  * @brief  清除所选的数据端口位。
  * @param  GPIOx: x 可取值为(A..G),用于选择对应的 GPIO 外设。
  * @param  GPIO_Pin: 指定要写入的端口位。
  *   此参数可以是 GPIO_Pin_x(x 可取值为 0..15)的任意组合。
  * @retval 无
  */
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)

/**
  * @brief  设置或清除所选的数据端口位。
  * @param  GPIOx: x 可取值为(A..G),用于选择对应的 GPIO 外设。
  * @param  GPIO_Pin: 指定要写入的端口位。
  *   此参数可以是 GPIO_Pin_x(x 可取值为 0..15)中的某一个值。
  * @param  BitVal: 指定要写入所选端口位的值。
  *   此参数可以是 BitAction 枚举类型中的一个值:
  *     @arg Bit_RESET: 清除该端口位(置 0)
  *     @arg Bit_SET: 设置该端口位(置 1)
  * @retval 无
  */
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)

/**
  * @brief  向指定的 GPIO 数据端口写入数据。
  * @param  GPIOx: x 可取值为(A..G),用于选择对应的 GPIO 外设。
  * @param  PortVal: 指定要写入端口输出数据寄存器的值。
  * @retval 无
  */
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
posted @ 2025-11-18 16:47  LI,Yi-han  阅读(5)  评论(0)    收藏  举报