固件库中与GPIO有关的函数主要有:函数名描述GPIO_Init根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器GPIO_ReadInputDataBit读取指定端口管脚的输入GPIO_ReadInputData读取指定的GPIO端口输入GPIO_ReadOutputDataBit读取指定端口管脚的输出GPIO_ReadOutputData读取指定的GPIO端口输出GPIO_SetBits设置指定的数据端口位GPIO_ResetBits清除指定的数据端口位GPIO_WriteBit设置或者清除指定的数据端口位GPIO_Write向指定GPIO数据端口写入数据1.1函数GPIO_Init函数名GPIO_Init函数原形voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)功能描述根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_InitStruct:指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息参阅Section:GPIO_InitTypeDef查阅更多该参数允许取值范围输出参数无返回值无先决条件无被调用函数无1.1.1:GPIO_TypeDef为一结构体:typedefstruct{__IOuint32_tCRL;//端口配置低寄存器__IOuint32_tCRH;//端口配置高寄存器__IOuint32_tIDR;//端口输入数据寄存器__IOuint32_tODR;__IOuint32_tBSRR;__IOuint32_tBRR;__IOuint32_tLCKR;}GPIO_TypeDef;GPIOx为一宏定义:#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)其中GPIOA_BASE=0x40010800,即PA口的起始地址,#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)这句语句的作用就是将GPIOA指定到PA口的入口地址中,也就是说将PA口的寄存器组取名为GPIOA。1.1.2:GPIO_InitTypeDef为结构体:typedefstruct{uint16_tGPIO_Pin;GPIOSpeed_TypeDefGPIO_Speed;GPIOMode_TypeDefGPIO_Mode;}GPIO_InitTypeDef;其中GPIO_Pin可取的值:GPIO_Pin描述GPIO_Pin_None无管脚被选中GPIO_Pin_0选中管脚0GPIO_Pin_15选中管脚15GPIO_Pin_All选中全部管脚GPIO_Speed可取的值:GPIO_Speed描述GPIO_Speed_10MHz最高输出速率10MHzGPIO_Speed_2MHz最高输出速率2MHzGPIO_Speed_50MHz最高输出速率50MHzGPIO_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复用推挽输出表面看来函数GPIO_Init只有两个输入参数,实则4个输入参数。第二个结构体中包括了三个参数,这三个参数分别是对管脚的端口,速度,和模式进行配置。这三个参数的值其实就是一些宏定义的数值。对这三个参数的选择就相当于对对应的寄存器进行配置。第一个结构体是寄存器映射,它定义在文件“stm32f10x.h”中,他的作用就是将与管脚有关的寄存器名字与硬件地址对应起来,例如寄存器CRL就相当于地址:0x40010800.第一与第二个结构体相结合并可以对某端口进行初始化了。1.1.3:例:配置PA口为浮空输入//定义一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体GPIO_InitTypeDefGPIO_InitStructure;//选中所有的端口GPIO_InitStructure.Gpio_Pin=GPIO_Pin_All;//选择端口的速度为10MGPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;//选择模式为浮空输入GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//完成初始化GPIO_Init(GPIOA,&GPIO_InitStructure);1.2函数GPIO_ReadInputDataBit函数名GPIO_ReadInputDataBit函数原形u8GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述读取指定端口管脚的输入输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_Pin:待读取的端口位输出参数无返回值输入端口管脚值先决条件无被调用函数无1.2.1:例:读取PB.7口的输入值u8ReadValue;ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);1.3函数GPIO_ReadInputData函数名GPIO_ReadInputData函数原形u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)功能描述读取指定的GPIO端口输入输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_Pin:待读取的端口位输出参数无返回值GPIO输入数据端口值先决条件无被调用函数无1.3.1:例:读取PC口的输入值U16ReadValue;ReadValue=GPIO_ReadInputData(GPIOC);1.4函数GPIO_SetBits函数名GPIO_SetBits函数原形voidGPIO_SetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述设置指定的数据端口位输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_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函数名GPIO_ResetBits函数原形voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)功能描述清除指定的数据端口位输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_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函数名GPIO_WriteBit函数原形voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin,BitActionBitVal)功能描述设置或者清除指定的数据端口位输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2GPIO_Pin:待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合输入参数3BitVal:该参数指定了待写入的值该参数必须取枚举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函数名GPIO_Write函数原形voidGPIO_Write(GPIO_TypeDef*GPIOx,u16PortVal)功能描述向指定GPIO数据端口写入数据输入参数1GPIOx:x可以是A,B,C,D或者E,来选择GPIO外设输入参数2PortVal:待写入端口数据寄存器的值返回值无先决条件无被调用函数无输出参数无1.6.1:例:向PA口写入一数据GPIO_Write(GPIOA,0X0101);1.8:要初始化某端口时还需打开该端口的时钟及配置系统的时钟源,与之相关的两个函数为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE)和SystemInit();2:将GOIO口配置成外部中断的输入口开始NVIC优先级分组NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)抢占优先级响应优先级NVIC初始化NVIC_Init(&NVIC_InitStructure)中断源中断使能配置相应端口为上拉输入模式EXTI配置选择某端口为中断输入端口选择中断通道选择中断中断模式响应方式编写中断服务程序使能中断2.1与NVIC相关的函数(1)NVIC_PriorityGroupConfig函数名NVIC_PriorityGroupConfig函数原形VoidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)功能描述设置优先级分组:先占优先级和从优先级输入参数NVIC_PriorityGroup:优先级分组位长度参阅Section:NVIC_PriorityGroup查阅更多该参数允许取值范围输出参数无返回值无先决条件优先级分组只能设置一次被调用函数无NVIC_PriorityGroup的值:NVIC_PriorityGroup描述NVIC_PriorityGroup_0先占优先级0位从优先级4位NVIC_PriorityGroup_1先占优先级1位从优先级3位NVIC_PriorityGroup_2先占优先级2位从优先级2位NVIC_PriorityGroup_3先占优先级3位从优先级1位NVIC_PriorityGroup_4先占优先级4位从优先级0位(2)NVIC_Init函数名NVIC_Init函数原形voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)功能描述根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器输入参数NVIC_InitStruct:指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置信息参阅Section:NVIC_InitTypeDef查阅更多该参数允许取值范围输出参数无返回值无先决条件无被调用函数无NVIC_InitTypeDefstructureNVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:typedefstruct{u8NVIC_IRQChannel;u8NVIC_IRQChannelPreemptionPriority;u8NVIC_IRQChannelSubPriority;FunctionalStateNVIC_IRQChannelCmd;}NVIC_InitTypeDef;NVIC_IRQChannel该参数用以指定IRQ通道。Table272.给出了该参数可取的值NVIC_IRQChannel描述WWDG_IRQChannel窗口看门狗中断PVD_IRQCha