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...

posted on 2023-12-20 09:32  WCH蓝牙应用分享  阅读(608)  评论(0编辑  收藏  举报