GPIO功能,从点亮一颗LED开始。
1.GPIO输出模式:将PB4引脚设置为推挽输出。
GPIOB_SetBits(GPIO_Pin_4); //设置默认电平,开启输出后输出高电平 // GPIOB_ResetBits(GPIO_Pin_4); //设置默认电平,开启输出后输出低电平 GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeOut_PP_5mA); //设置为推挽输出模式,有5mA和20mA两种配置
2.GPIO输入模式:将PB4引脚设置为上拉输入或下拉输入或浮空输入。
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PU); //设置为上拉输入模式,有上拉输入/下拉输入/浮空输入三种配置 GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PD); //设置为下拉输入模式 GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_Floating); //设置为浮空输入模式
3.GPIO中断(支持中断的引脚PA0-15/PB0-15,若无PB8和PB9可直接使用PB22和PB23,若有PB8和PB9,则需要映射后使用PB22和PB23)
GPIOB_ModeCfg(GPIO_Pin_4, GPIO_ModeIN_PU); GPIOB_ITModeCfg(GPIO_Pin_4, GPIO_ITMode_FallEdge); // 下降沿触发 PFIC_EnableIRQ(GPIO_B_IRQn);
__INTERRUPT __HIGH_CODE void GPIOB_IRQHandler(void) { GPIOB_ClearITFlagBit(GPIO_Pin_4); }
在gpio.h中有着关于gpio的库函数,可以简单看下:
1.配置IO输入输入模式:
* @brief GPIOA端口引脚模式配置 * * @param pin - PA0-PA15 * @param mode - 输入输出类型 */ void GPIOA_ModeCfg(uint32_t pin, GPIOModeTypeDef mode);
typedef enum { GPIO_ModeIN_Floating, //浮空输入 GPIO_ModeIN_PU, //上拉输入 GPIO_ModeIN_PD, //下拉输入 GPIO_ModeOut_PP_5mA, //推挽输出最大5mA GPIO_ModeOut_PP_20mA, //推挽输出最大20mA } GPIOModeTypeDef;
2.输出模式下配置IO输出高或低电平或翻转电平:
#define GPIOA_ResetBits(pin) (R32_PA_CLR |= pin) //输出低电平 #define GPIOA_SetBits(pin) (R32_PA_OUT |= pin) //输出高电平 #define GPIOA_InverseBits(pin) (R32_PA_OUT ^= pin) //翻转IO电平
3.输入模式下读取IO电平状态:
#define GPIOA_ReadPort() (R32_PA_PIN) //读取PA口所有IO状态 #define GPIOA_ReadPortPin(pin) (R32_PA_PIN & (pin)) //读取PA口指定IO状态
4.设置IO中断触发方式:
void GPIOA_ITModeCfg(uint32_t pin, GPIOITModeTpDef mode); typedef enum { GPIO_ITMode_LowLevel, //低电平触发 GPIO_ITMode_HighLevel, //高电平触发 GPIO_ITMode_FallEdge, //下降沿触发 GPIO_ITMode_RiseEdge, //上升沿触发 } GPIOITModeTpDef;
5.读取中断状态标志:
#define GPIOA_ReadITFlagPort() (R16_PA_INT_IF) //读取PA口所有IO中断标志状态 #define GPIOA_ReadITFlagBit(pin) (R16_PA_INT_IF & (pin)) //读取PA口指定IO中断标志状态
6.清除中断标志:
#define GPIOA_ClearITFlagBit(pin) (R16_PA_INT_IF = pin)
7.IO映射:
* @brief 外设功能引脚映射 * * @param s - 是否使能映射 * @param perph - RB_RF_ANT_SW_EN - RF antenna switch control output on PB16/PB17/PB18/PB19/PB20/PB21 * RB_PIN_U0_INV - RXD0/RXD0_/TXD0/TXD0_ invert input/output * RB_PIN_INTX - INTX: INT24/INT25 PB8/PB9 -> INT24_/INT25_ PB22/PB23 * RB_PIN_MODEM - MODEM: PB1/PB5 -> PB14/PB15 * RB_PIN_I2C - I2C: PB13/PB12 -> PB21/PB20 * RB_PIN_PWMX - PWMX: PA12/PA13/PB4/PB6/PB7 -> PA6/PA7/PB1/PB2/PB3 * RB_PIN_SPI0 - SPI0: PA12/PA13/PA14/PA15 -> PB12/PB13/PB14/PB15 * RB_PIN_UART3 - UART3: PA4/PA5 -> PB20/PB21 * RB_PIN_UART2 - UART2: PA6/PA7 -> PB22/PB23 * RB_PIN_UART1 - UART1: PA8/PA9 -> PB12/PB13 * RB_PIN_UART0 - UART0: PB4/PB7 -> PA15/PA14 * RB_PIN_TMR3 - TMR2: PA9 -> PB23 * RB_PIN_TMR2 - TMR2: PA11 -> PB11 * RB_PIN_TMR1 - TMR1: PA10 -> PB10 * RB_PIN_TMR0 - TMR0: PA9 -> PB23 */ void GPIOPinRemap(FunctionalState s, uint16_t perph);
8.开启IO模拟功能:
* @brief 模拟外设GPIO引脚功能控制 * * @param s - 是否启用模拟外设功能 * @param perph - RB_PIN_ADC8_9_IE - ADC/TKEY 9/8通道 * RB_PIN_ADC6_7_IE - ADC/TKEY 7/6通道 * RB_PIN_ADC10_IE - ADC/TKEY 10通道 * RB_PIN_ADC11_IE - ADC/TKEY 11 通道 * RB_PIN_USB2_DP_PU - USB2 U2D+引脚内部上拉电阻 * RB_PIN_USB2_IE - USB2引脚 * RB_PIN_USB_DP_PU - USB UD+引脚内部上拉电阻 * RB_PIN_USB_IE - USB 引脚 * RB_PIN_ADC0_IE - ADC/TKEY 0 通道 * RB_PIN_ADC1_IE - ADC/TKEY 1 通道 * RB_PIN_ADC12_IE - ADC/TKEY 12 通道 * RB_PIN_ADC13_IE - ADC/TKEY 13 通道 * RB_PIN_XT32K_IE - 32KHz晶振LSE引脚 * RB_PIN_ADC2_3_IE - ADC/TKEY 2/3 通道 * RB_PIN_ADC4_5_IE - ADC/TKEY 4/5 通道 */ void GPIOAGPPCfg(FunctionalState s, uint16_t perph);
END...