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)
本文来自博客园,作者:LI,Yi-han,转载请注明原文链接:https://www.cnblogs.com/LiYi-han/p/19238440

浙公网安备 33010602011771号