前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【GD32L233C-START】8、按键—外部中断

【GD32L233C-START】8、按键—外部中断

作者头像
ManInRoad
发布2022-04-04 15:54:34
6670
发布2022-04-04 15:54:34
举报
文章被收录于专栏:物联网思考物联网思考

1、硬件连接

可以看出,PA0通过R29下拉到GND,按键按下时, PA0的电压为3.3V,没有按下时,PA0的电压为0V,因此可以通过判断上升沿,判断按键是否按下。

2、中断优先级

可以看出只有2位,4个优先等级,而且不分先占、次占优先级,这与cortex m3还是区别比较大的。

3、中断线

可以看出PA0 / PB0 / PC0 / PD0 / PF0对应一个中断线,即就是这几个如果要用到外部中断,同一时刻只能有一个。

4、中断函数

查看startup_gd32l23x.s文件,发现外部IO中断只有7个中断函数,分别是:

代码语言:javascript
复制
EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI5_9_IRQHandler
EXTI10_15_IRQHandler

从这里也可以看出,PX5-PX9,对应一个中断函数,PX10-PX15,对应一个中断函数,需要在中断函数中判断,具体是哪个中断源。

5、代码实现

代码语言:javascript
复制
static uint8_t KeyState=0;

void KeyInit(void)
{
	rcu_periph_clock_enable(RCU_GPIOA);
	gpio_mode_set(GPIOA, GPIO_MODE_INPUT, GPIO_PUPD_NONE, GPIO_PIN_0);

    /* enable the SYSCFG clock */
    rcu_periph_clock_enable(RCU_SYSCFG);
    /* enable and set key EXTI interrupt to the specified priority */
    nvic_irq_enable(EXTI0_IRQn, 2U);

    /* connect key EXTI line to key GPIO pin */
    syscfg_exti_line_config(EXTI_SOURCE_GPIOA, EXTI_SOURCE_PIN0);

    /* configure key EXTI line */
    exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_RISING);
    exti_interrupt_flag_clear(EXTI_0);
}

void KeyPolling(void)
{
	if(KeyState)
	{
		KeyState=0;
		printf("key press\r\n");
	}
}

void EXTI0_IRQHandler(void)
{
    if(RESET != exti_interrupt_flag_get(EXTI_0)) {
        exti_interrupt_flag_clear(EXTI_0);
		KeyState=1;
    }
}

6、现象

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-02-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 物联网思考 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、硬件连接
  • 2、中断优先级
  • 3、中断线
  • 4、中断函数
  • 5、代码实现
  • 6、现象
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档