GD32F4 实现按键中断设置——EXTI外部中断配置教程

一、背景

本人最近在做将STM32 H7的代码移植到GD32 F4上,实现芯片的国产化替代。在移植过程中,需要实现按键中断。

在STM32 M7的GPIO库中提供了引脚中断函数接口,只需要在引脚初始化配置时,选择引脚模式为:GPIO_MODE_IT_RISING 或是 GPIO_MODE_IT_FALLING 即可开启引脚上升沿 / 下降沿中断。

而在GD32中,并没有在引脚初始化函数中封装中断配置,需要通过中断/事件控制器(EXIT)进行设置。

二、中断/事件控制器(EXTI)

Cortex-M4 集成了嵌套式矢量型中断控制器实现高效的异常和中断处理。EXTI(中断/事件控制器)包括 23 个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。 EXTI 有三种触发类型:上升沿触发、下降沿触发和任意沿触发。 EXTI 中的每一个边沿检测电路都可以独立配置和屏蔽。
EXTI触发源包括来自I/O管脚的16根线以及来自内部模块的7根线。 (包括LVD、 RTC闹钟、 USB唤醒、以太网唤醒、 RTC侵入和时间戳、 RTC唤醒)。通过配置SYSCFG_EXTISSx寄存器,所有的GPIO管脚都可以被选作EXTI的触发源。
 

三、外部中断配置

1. 使能 GPIO 和 SYSCFG 时钟

rcu_periph_clock_enable(RCU_GPIOC);
rcu_periph_clock_enable(RCU_SYSCFG);

2. 外部中断引脚配置为输入模式,这里以PC13为例

gpio_mode_set(GPIOC, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_13);

3.  开启外部中断

nvic_irq_enable(EXTI10_15_IRQn, 2U, 0U);

        GPIO_PIN_10 ~ GPIO_PIN_15 同用一个中断响应函数 EXTI10_15_IRQHandler;GPIO_PIN_5 ~ GPIO_PIN_9 同用一个中断响应函数 EXTI5_9_IRQHandler,其余的例如 GPIO_PIN_1 的响应函数为 EXTI1_IRQHandler。

4. 配置SYSCFG_EXTISSx寄存器,设置PIN13为触发源

syscfg_exti_line_config(EXTI_SOURCE_GPIOC, EXTI_SOURCE_PIN13);

5.  初始化外部中断并清除中断标记

exti_init(EXTI_13, EXTI_INTERRUPT, EXTI_TRIG_RISING);
exti_interrupt_flag_clear(EXTI_13);

6.  配置中断响应函数

void EXTI10_15_IRQHandler(void)
{
    if(RESET != exti_interrupt_flag_get(EXTI_13)){
       /*--------以下放入中断响应函数---------*/ 


    }
    exti_interrupt_flag_clear(EXTI_13);
}
  • 9
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河狸打捞员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值