HC32M0+ GPIO

 GPIO输入:

    stc_gpio_cfg_t stcGpioCfg;//配置
    
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);//首先打开GPIO的时钟。
    ///< 端口方向配置->输入
    stcGpioCfg.enDir = GpioDirIn;//配置为输出
    ///< 端口驱动能力配置->高驱动能力
    stcGpioCfg.enDrv = GpioDrvL;//配置驱动能力
    ///< 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;//上下拉关闭
    stcGpioCfg.enPd = GpioPdDisable;//上下拉关闭
    ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enOD = GpioOdDisable;//开漏输出关闭
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    stcGpioCfg.enCtrlMode = GpioAHB;//总线控制模式是AHB
    ///< GPIO IO USER KEY初始化
    Gpio_Init(STK_USER_PORT, STK_USER_PIN, &stcGpioCfg);    //初始化
    

输入:

1.设置时钟

2.设置输入输出

3.设置驱动能力

4.上下拉关闭

5.开漏输出关闭

6.AHB模式

7.初始化

GPIO输出 

    stc_gpio_cfg_t stcGpioCfg;//配置IO引脚
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);//设置GPIO的外设时钟
    ///< 端口方向配置->输出(其它参数与以上(输入)配置参数一致)
	stcGpioCfg.enDir = GpioDirOut;//配置为输出
    < 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;

 stc_gpio_cfg_t

typedef struct
{
    en_gpio_dir_t       enDir;           ///< 端口方向配置//端口方向
    en_gpio_drv_t       enDrv;           ///< 端口驱动能力配置//驱动能力//电流相关的
    en_gpio_pu_t        enPu;            ///< 端口上拉配置
    en_gpio_pd_t        enPd;            ///< 端口下拉配置
    en_gpio_od_t        enOD;            ///< 端口开漏输出配置
    en_gpio_ctrl_mode_t enCtrlMode;      ///< 端口输入/输出值寄存器总线控制模式配置//配置模式
}stc_gpio_cfg_t;

GPIO_IRQ

先配置为输入。

    stc_gpio_cfg_t stcGpioCfg;
    
    ///< 打开GPIO外设时钟门控
    Sysctrl_SetPeripheralGate(SysctrlPeripheralGpio, TRUE);
    
    ///< 端口方向配置->输入
    stcGpioCfg.enDir = GpioDirIn;
    ///< 端口驱动能力配置->高驱动能力
    stcGpioCfg.enDrv = GpioDrvL;
    ///< 端口上下拉配置->无
    stcGpioCfg.enPu = GpioPuDisable;
    stcGpioCfg.enPd = GpioPdDisable;
    ///< 端口开漏输出配置->开漏输出关闭
    stcGpioCfg.enOD = GpioOdDisable;
    ///< 端口输入/输出值寄存器总线控制模式配置->AHB
    stcGpioCfg.enCtrlMode = GpioAHB;
    ///< GPIO IO USER KEY初始化
    Gpio_Init(STK_USER_PORT, STK_USER_PIN, &stcGpioCfg); 

 配置下降沿/实能中断号以及中断优先级

    ///< 打开并配置USER KEY为下降沿中断
    Gpio_EnableIrq(STK_USER_PORT, STK_USER_PIN, GpioIrqFalling);//下降沿
    ///< 使能端口PORTA系统中断
    EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);//中断号//中断优先级//这个怎么确认

中断服务函数

///< PortA中断服务函数
void PortA_IRQHandler(void)
{
    if(TRUE == Gpio_GetIrqStatus(STK_USER_PORT, STK_USER_PIN))
    {            
        ///< LED点亮
        Gpio_SetIO(STK_LED_PORT, STK_LED_PIN);
        
        delay1ms(2000);
        
        ///< LED关闭
        Gpio_ClrIO(STK_LED_PORT, STK_LED_PIN);  

        Gpio_ClearIrq(STK_USER_PORT, STK_USER_PIN);    
    }

}  

 简单总结一下:

1.进行端口设置

2.端口下降沿的使能

3.配置中断向量号以及中断优先级

4.配置中断服务函数

 插入

 中断响应过程

  1. 中断源发出中断请求
  2. 判断处理器是否允许中断,以及该中断源是否被屏蔽
  3. 中断优先级排队
  4. 处理器暂停当前程序,保护断点地址和处理器的当前状态,根据中断类型号,查找中断向量表,转到对应的中断服务程序
  5. 执行中断服务程序
  6. 恢复被保护的状态,执行中断返回指令,回到被中断的程序
  • 多个中断同时出现时,处理器先响应高优先级的中断
  • 低优先级中断的ISR执行时,可以被高优先级中断再次打断
  • ISR比App Code拥有更高的执行优先级

其他        

typedef struct
{
    boolean_t           bOutputVal;      ///< 默认端口输出电平
    en_gpio_dir_t       enDir;           ///< 端口方向配置
    en_gpio_drv_t       enDrv;           ///< 端口驱动能力配置
    en_gpio_pu_t        enPu;            ///< 端口上拉配置
    en_gpio_pd_t        enPd;            ///< 端口下拉配置
    en_gpio_od_t        enOD;            ///< 端口开漏输出配置
    en_gpio_ctrl_mode_t enCtrlMode;      ///< 端口输入/输出值寄存器总线控制模式配置
}stc_gpio_cfg_t;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值