固件库中与GPIO有关的函数主要有:
函数名 GPIO_Init GPIO_ReadInputDataBit GPIO_ReadInputData GPIO_ReadOutputDataBit GPIO_ReadOutputData GPIO_SetBits GPIO_ResetBits GPIO_WriteBit GPIO_Write 描述 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 读取指定端口管脚的输入 读取指定的GPIO端口输入 读取指定端口管脚的输出 读取指定的GPIO端口输出 设置指定的数据端口位 清除指定的数据端口位 设置或者清除指定的数据端口位 向指定GPIO数据端口写入数据 1.1函数GPIO_Init
函数名 函数原形 功能描述 输入参数1 输入参数2 GPIO_Init void GPIO_Init(GPIO_TypeDef* GPIO_InitTypeDef* GPIO_InitStruct) GPIOx, 根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息参阅Section:GPIO_InitTypeDef查阅更多该参数允许取值范围 无 无 无 无 输出参数 返回值 先决条件 被调用函数 1.1.1:GPIO_TypeDef为一结构体:
typedef struct {
__IO uint32_t CRL; // 端口配置低寄存器 __IO uint32_t CRH; // 端口配置高寄存器 __IO uint32_t IDR; // 端口输入数据寄存器 __IO uint32_t ODR; __IO uint32_t BSRR; __IO uint32_t BRR; __IO uint32_t LCKR; } GPIO_TypeDef;
GPIOx为一宏定义:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
其中GPIOA_BASE=0x40010800,即PA口的起始地址,#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这句语句的作用就是将GPIOA指定到PA口的入口地址中,也就是说将PA口的寄存器组取名为GPIOA。
1.1.2:GPIO_InitTypeDef为结构体:
typedef struct {
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed; GPIOMode_TypeDef GPIO_Mode; }GPIO_InitTypeDef; 其中GPIO_Pin可取的值: GPIO_Pin GPIO_Pin_None GPIO_Pin_0 GPIO_Pin_15 GPIO_Pin_All GPIO_Speed可取的值: GPIO_Speed GPIO_Speed_10MHz GPIO_Speed_2MHz GPIO_Speed_50MHz GPIO_Mode可取的值: GPIO_Mode GPIO_Mode_AIN GPIO_Mode_IN_FLOATING GPIO_Mode_IPD GPIO_Mode_IPU GPIO_Mode_Out_OD GPIO_Mode_Out_PP GPIO_Mode_AF_OD GPIO_Mode_AF_PP 描述 最高输出速率10MHz 最高输出速率2MHz 最高输出速率50MHz 描述 模拟输入 浮空输入 下拉输入 上拉输入 开漏输出 推挽输出 复用开漏输出 复用推挽输出 描述 无管脚被选中 选中管脚0 选中管脚15 选中全部管脚 表面看来函数GPIO_Init只有两个输入参数,实则4个输入参数。第二个结构体中包括了三个参数,这三个参数分别是对管脚的端口,速度,和模式进行配置。这三个参数的值其实就是一些宏定义的数值。对这三个参数的选择就相当于对对应的寄存器进行配置。第一个结构体是寄存器映射,它定义在文件“stm32f10x.h”中,他的作用就是将与管脚有关的寄存器名字与硬件地址对应起来,例如寄存器CRL就相当于地址:0x40010800.第一与第二个结构体相结合并可以对某端口进行初始化了。
1.1.3:例:配置PA口为浮空输入
//定义一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体
GPIO_InitTypeDef GPIO_InitStructure; //选中所有的端口
GPIO_InitStructure. Gpio_Pin = GPIO_Pin_All; //选择端口的速度为10M
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz; //选择模式为浮空输入
GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IN_FLOATING; //完成初始化
GPIO_Init(GPIOA, &GPIO_InitStructure);
1.2函数GPIO_ReadInputDataBit
函数名 函数原形 功能描述 输入参数1 输入参数2 输出参数 返回值 先决条件 被调用函数 GPIO_ReadInputDataBit u8 GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) 读取指定端口管脚的输入 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_Pin:待读取的端口位 无 输入端口管脚值 无 无 1.2.1:例:读取PB.7口的输入值
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
1.3函数GPIO_ReadInputData
函数名 函数原形
GPIO_ReadInputData u16 GPIO_ReadInputData(GPIO_TypeDef*
GPIOx) 功能描述 输入参数1 输入参数2 输出参数 返回值 先决条件 被调用函数 读取指定的GPIO端口输入 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_Pin:待读取的端口位 无 GPIO输入数据端口值 无 无 1.3.1:例:读取PC口的输入值
U16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
1.4函数GPIO_SetBits
函数名 函数原形 功能描述 输入参数1 输入参数2 输出参数 返回值 先决条件 被调用函数 GPIO_SetBits void GPIO_SetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) 设置指定的数据端口位 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_Pin:待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合 无 无 无 无 1.4.1:例:设置PA.1和PA.2口为高电平
GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.5函数GPIO_RsetBits
函数名 函数原形 功能描述 输入参数1 输入参数2 GPIO_ResetBits void GPIO_ResetBits(GPIO_TypeDef* GPIOx, u16 GPIO_Pin) 清除指定的数据端口位 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_Pin:待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合
输出参数 返回值 先决条件 被调用函数 无 无 无 无 1.5.1:例:设置PA.1和PA.2口为低电平
GPIO_RsetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.6函数GPIO_WriteBit
函数名 函数原形 功能描述 输入参数1 输入参数2 输入参数3 GPIO_WriteBit void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u16 GPIO_Pin, BitAction BitVal) 设置或者清除指定的数据端口位 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 GPIO_Pin:待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合 BitVal: 该参数指定了待写入的值该参数必须取枚举BitAction的其中一个值Bit_RESET: 清除数据端口位Bit_SET: 设置数据端口位 无 无 无 无 返回值 先决条件 被调用函数 输出参数 1.6.1:例:设置PA.1,PA.2口为低电平
GPIO_WriteBit(GPIOA,GPIO_Pin_1 | GPIO_Pin_2,Bit_RESET);
1.7函数GPIO_Write
函数名 函数原形 功能描述 输入参数1 输入参数2 返回值 先决条件 被调用函数 GPIO_Write void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal) 向指定GPIO数据端口写入数据 GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设 PortVal: 待写入端口数据寄存器的值 无 无 无
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库超经典的STM32学习笔记 - 第一章GPIO口在线全文阅读。
相关推荐: