GPIO8种输入输出模式:
*输出模式:控制端口输出高低电平,用以驱动LED、蜂鸣器、模拟通信协议输出时序 等
*输入模式:读取端口高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟通信协议接收数据等
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 复用推挽
GPIO输出使用库
rcc.h
常用时钟:
RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
参数:RCC_APB2Periph_x ENABLE / DISABLE
gpio.h
常用GPIO函数
GPIO_InitTypeDef GPIO_InitStruct ; //GPIO初始化类型 GPIO初始化结构体
GPIO_InitStruct.GPIO_Mode = //模式参数:GPIO_Mode_x
GPIO_InitStruct.GPIO_Pin = //引脚参数:GPIO_Pin_x
GPIO_InitStruct.GPIO_Speed = //输出速度参数:GPIO_Speed_x
GPIO_Init(GPIOx,&GPIO_InitStruct);
调用已经配置好的结构体,写入到GPIOx中
void GPIO_AFIODeInit(void);//
复位AFIO外设
参数:()
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
设置默认值(安全参数)
参数:GPIO_InitStruct
void GPIO_DeInit(GPIO_TypeDef* GPIOx);
复位GPIOx端口
参数:GPIOx
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
将GPIO端口某些引脚设置为高电平1
参数:GPIOxGPIO_Pin_x
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
将GPIO端口某些引脚置为低电平0
参数:GPIOxGPIO_Pin_x
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
指定GPIO端口某个引脚电平1或0
参数:GPIOxGPIO_Pin_xBit_SET/RESET
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
设置GPIO端口所有引脚数据(16位)
参数:GPIOx0x0000
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取GPIO口某一引脚电平(输入数据寄存器中的某一位)
参数:GPIOxGPIO_Pin_x
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
读取GPIO端口整个输入数据寄存器
参数:GPIO
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
读取GPIO口某一引脚电平(输出数据寄存器中读取)
参数:GPIOxGPIO_Pin_x
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
读取GPIO端口整个输出数据寄存器
参数:GPIOx
EXTI外部中断
AFIO:
void GPIO_AFIODeInit(void);
复位AFIO外设,清除AFIO外部配置
参数:()
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
锁定GPIO配置
参数:GPIOxGPIO_Pin_x
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
进行引脚重映射
参数:重映射的方式ENABLE/DISABLE
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
选择用作EXTI线的GPIO引脚
参数:GPIO_PortSourceGPIOx(指定GPIO端口)GPIO_PinSourcex(指定引脚)
不常用:
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);
选择以太网媒体接口
参数:@arg GPIO_ETH_MediaInterface_MII : MII 模式
@arg GPIO_ETH_MediaInterface_RMII : RMII 模式
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
选择GPIO引脚作为Event输出
参数:GPIO_PortSourceGPIOx GPIO_PinSourcex
void GPIO_EventOutputCmd(FunctionalState NewState);
启用或禁止事件输出
参数:ENABLE/DISABLE
EXTI:
EXTI_InitTypeDef EXTI_InitSturct;
EXTI_InitSturct.EXTI_Line = ;//选择线路配置为中断模式:参数:EXTI_Linex
EXTI_InitSturct.EXTI_LineCmd = ;//指定状态参数:ENABLE/DISABLE
EXTI_InitSturct.EXTI_Mode = ;//指定外部中断线模式
参数:EXTI_Mode_Interrupt中断模式
EXTI_Mode_Event事件模式
EXTI_InitSturct.EXTI_Trigger =;//指定触发信号的有效边沿
EXTI_Trigger_Rising上升沿
EXTI_Trigger_Falling下降沿
EXTI_Trigger_Rising_Falling双边沿
void EXTI_Init(EXTI_InitTypeDef* EXTI_InitStruct);
初始化EXTI
参数:EXTI_InitStruct
void EXTI_DeInit(void);
清除EXTI配置
void EXTI_StructInit(EXTI_InitTypeDef* EXTI_InitStruct);
把参数传递结构体变量赋默认值
(结构体初始化模块:定义结构体→结构体赋值→传递结构体地址)
void EXTI_GenerateSWInterrupt(uint32_t EXTI_Line);
软件触发外部中断
参数:EXTI_Linex
主程序查看标志位:
EXTI_GetFlagStatus(uint32_t EXTI_Line);
获取指定的标志位是否被置1
(标志位:记录某事件是否发生1/0)
void EXTI_ClearFlag(uint32_t EXTI_Line);
对被置1的标志位进行清除
中断程序查看标志位:
EXTI_GetITStatus(uint32_t EXTI_Line);
获取中断标志位是否被置1
void EXTI_ClearITPendingBit(uint32_t EXTI_Line);
清除中断挂起标志位
NVIC:
void NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup);
中断分组
参数:NVIC_PriorityGroupx(1~4)
NVIC_InitTypeDef NVIC_InitStruct;
NVIC_InitStruct.NVIC_IRQChannel=;//指定中断通道
NVIC_InitStruct.NVIC_IRQChannelCmd=;//指定使能/失能参数ENABLE/DISABLE
NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=;//指定抢占优先级0~15
NVIC_InitStruct.NVIC_IRQChannelSubPriority=;//指定响应优先级 0~15
void NVIC_Init(NVIC_InitTypeDef* NVIC_InitStruct);
根据结构体指定参数初始化NVIC
不常用
void NVIC_SetVectorTable(uint32_t NVIC_VectTab, uint32_t Offset);
设置中断向量表
void NVIC_SystemLPConfig(uint8_t LowPowerMode, FunctionalState NewState);
系统低功耗配置