【GD32F470紫藤派开发板使用手册】第三讲 EXTI-按键中断检测实验

发布者:RadiantEyes最新更新时间:2024-12-11 来源: elecfans关键字:EXTI 手机看文章 扫描二维码
随时随地手机看文章

3.1实验内容

通过本实验主要学习以下内容:

  • EXTI中断原理;

  • 按键中断检测原理;

3.2实验原理

3.2.1NVIC中断向量控制器

介绍EXTI之前,首先为各位读者介绍NVIC中断向量控制器,NVIC为M4内核组件,用于实现高效的异常和中断处理。NVIC可以支持抢占以及咬尾中断,具有多达68种外设中断以及4位中断优先等级配置(最多支持16个中断有限等级),当中断或异常产生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序(ISR) 后自动将其出栈。

有关NVIC中断相关配置函数可参考gd32f4xx_misc.c,其中主要有以下几个函数,其功能简介如下表所示。

wKgaomY23qOAEmmfAAG0vgy2_U4513.png?imageView2/2/w/1000

3.2.2EXTI中断原理

EXTI为外部中断/事件控制器,GD32F4xx系列MCU EXTI可以最多支持23个相互独立的边沿检测电路并且能够向处理器内核产生中断请求或唤醒事件。EXTI有三种触发类型:上升沿触发、下降沿触发和任意沿触发。EXTI中的每一个边沿检测电路都可以独立配置和屏蔽。

EXTI框图如下图所示,极性控制用于控制边沿检测,可实现对外部EXTI信号线进行检测判断,当符合相关极性配置的EXTI信号出现后,将会发出EXTI请求,硬件EXTI请求与内部软件触发信号相或,然后输出给NVIC中断向量控制器产生中断以及输出至唤醒单元进行唤醒,也即是内部软件也可以触发相关请求。

wKgaomY23rmAKysIAADHefyD1l8246.png?imageView2/2/w/1000

EXTI相关触发源如下表所示,所有的GPIO均可以触发EXTI,另外LVD、RTC闹钟、USB唤醒以及以太网唤醒也可以触发EXTI中断或事件,EXTI可用于唤醒深度睡眠模式下的MCU。

wKgaomY23syANkiFAAF9lZFhLyA501.png?imageView2/2/w/1000

注意:相同编号的引脚共用中断入口,比如PA0、PB0、PC0均使用EXTI0中断线,读者在使用时需注意不同的EXTI中断需要使用不同编号的GPIO引脚。

•软件触发EXTI中断请求可通过设置EXTI_SWIEV软件中断事件寄存器实现,如下图所示,设置相应控制位为1,即可实现软件触发EXTI中断请求。

wKgZomY23uGAS0ibAALbL54CmCk304.png?imageView2/2/w/1000

3.3硬件设计

本例程所使用的电路也为按键电路,具体可参考2.3章节描述。

3.4代码解析

3.4.1主函数代码解析

主函数代码如下所示,主要包括驱动初始化、LED初始化、key按键结构体初始化(此处将用户按键配置为中断模式,并将中断回调函数注册为USER_KEY_IRQHandler)、串口初始化以及NVIC配置,用户按键使用的是PA1引脚,因而使能EXTI1_IRQn中断号,延迟1S后,打印Example of key interrupt detection,之后进入主循环,在主循环中查询USER_KEY.press_timerms标志位,当USER_KEY被按键触发中断后,该标志将会被设置为PRESS_DOWN,然后被主循环检测到后,将会打印USER_KEY is pressed to trigger an interrupt。

C
int main(void)
{
driver_init();
bsp_led_group_init();
bsp_led_on(&LED2);
bsp_led_off(&LED1);

/* 配置按键为中断模式,并注册按键回调函数 */
USER_KEY.key_gpio->gpio_mode = INT_LOW;
USER_KEY.key_gpio->int_callback = USER_KEY_IRQHandler;
bsp_key_init(&USER_KEY);
nvic_irq_enable(EXTI1_IRQn,0,0);

bsp_uart_init(&BOARD_UART);
delay_ms(1000);
printf_log('Example of key interrupt detection.rn');

while (1)
{
if(USER_KEY.press_timerms == PRESS_DOWN)
{
/* 检测到按键被按下 */
USER_KEY.press_timerms = PRESS_NONE;
printf_log('USER_KEY is pressed to trigger an interrupt.rn');
}
}
}

3.4.2按键中断回调函数

按键中断回调函数如下所示,该函数在dvire_gpio_exti_handle中被调用,dvire_gpio_exti_handle在EXTI1_IRQHandler中被调用,其中EXTI2_IRQHandler为EXTI2的中断服务程序入口。

C
void USER_KEY_IRQHandler(typdef_gpio_general *KEYx_IO)
{
if(SET==bsp_key_state_get(&USER_KEY))
{
USER_KEY.press_timerms=PRESS_DOWN;
bsp_led_toggle(&LED2);
bsp_led_toggle(&LED1);
}
}

void dvire_gpio_exti_handle(typdef_gpio_general *gpio)
{
bit_status int_input_bit=RESET;
if(exti_flag_get(gpio->extix)==SET)
{
exti_flag_clear(gpio->extix);
int_input_bit=dvire_gpio_pin_filter_get(gpio);

if( (gpio->gpio_mode==INT_LOW && int_input_bit==RESET) || (gpio->gpio_mode==INT_HIGH && int_input_bit==SET) )
{
if(gpio->int_callback!=NULL)
{
gpio->int_callback((typdef_gpio_general *)gpio);
}
}
}
}
void EXTI1_IRQHandler(void)
{
dvire_gpio_exti_handle(USER_KEY.key_gpio);
}

3.5实验结果

将本例程烧录到紫藤派开发板中,在液晶上首先将会打印Example of key interrupt detection.,之后按下USER_KEY按键后,将会打印:USER_KEYis pressed to trigger an interrupt.。

wKgaomY23w-AQAFRACT6Poexn24819.png?imageView2/2/w/1000

关键字:EXTI 引用地址:【GD32F470紫藤派开发板使用手册】第三讲 EXTI-按键中断检测实验

上一篇:【GD32F303红枫派开发板使用手册】第一讲 RCU-时钟配置及输出实验
下一篇:【GD32F303红枫派开发板使用手册】第十讲 FWDGT-独立看门狗实验

推荐阅读最新更新时间:2026-03-24 10:30

GD32F470紫藤开发板使用手册】第六讲 TIMER_3路PWM输出实验
6.1实验内容 通过本实验主要学习以下内容: TIMER PWM输出原理 TIMER 定时中断 6.2实验原理 本例程中,采用TIMER5进行定时中断,在中断中改变TIMER0前三个通道的占空比,使用示波器或逻辑分析仪,可以测量TIMER0前三个通道PA8、PA9和PA10的波形。也可以通过飞线的方式将三个IO口分别接到红绿蓝三种不同颜色灯珠上,实现RGB彩灯的效果。 6.3硬件设计 TIMER0的前三个通道分别为PA8、PA9和PA10,读者直接对开发板上引出的排针进行测试即可。 6.4代码解析 本例程使用了两个TIMER,其中TIMER5用来产生30ms的周期性中断,在TIMER5的中断中,对TIMER0的三个通道占
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第六讲 TIMER_3路PWM输出实验
GD32F470紫藤开发板使用手册】第七讲 FWDG-看门狗实验
7.1实验内容 通过本实验主要学习以下内容: 独立看门狗的原理 独立看门狗功能介绍 实现独立看门狗功能 7.2实验原理 前面讲到,看门狗的计数值在每一个计数器时钟来的时候减1,那么这个时钟是什么呢,我们来看一下GD32F470的时钟树: 从时钟树可以看到,FWDGT的时钟来源于IRC32K,这是GD32F470的内部时钟,典型的频率值是32KHz。但要注意,这个IRC32K不是直接连到FWDGT计数器的,而是需要经过一个预分频器,这个分频器大小通过FWDGT_PSC进行设定。 预分频寄存器(FWDGT_PSC): 如设定PS 为001b,那么计数器的时钟频率就为32K/8 = 4KHz,即每隔250us计数值减1
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第七讲 FWDG-看门狗实验
GD32F470紫藤开发板使用手册】第一讲 GPIO-流水灯实验
1.1实验内容 通过本实验主要学习以下内容: GPIO结构及原理; GPIO输出功能实现; LED驱动原理。 1.2实验原理 1.2.1GPIO外设原理 GD32F4xx系列MCU最多可支持140个通用I/O引脚(GPIO),分别为PA0 ~ PA15,PB0 ~ PB15,PC0 ~ PC15,PD0 ~ PD15,PE0 ~ PE15,PF0 ~ PF15,PG0 ~ PG15,PH0 ~ PH15和PI0 ~ PI11,各片上设备用其来实现逻辑输入/输出功能。每个GPIO端口有相关的控制和配置寄存器以满足特定应用的需求。GPIO引脚上的外部中断在中断/事件控制器(EXTI)中有相关的控制和配置寄存器。 GPIO
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第一讲 GPIO-流水灯实验
GD32F470紫藤开发板使用手册】第九讲 USART-printf打印实验
9.1实验内容 通过本实验主要学习以下内容: 串口简介 GD32F470串口工作原理 使用printf打印信息 9.2实验原理 9.2.1串口简介 串口,从广义上看,指所有串行通信接口,比如RS232、RS422、RS485、SPI、IIC等。串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的通讯方式。和串行通讯相对应的是并行通讯,并行通信指一个传输接口可以传输8个bit即一个byte(有时甚至更多),虽然串行通信比并行通信慢,但是串口可以在仅仅使用两根线的情况下就能实现数据的传输。 对于GD32F470来说,串口一般特指USART(通用同步异步收发器 )和UART(通用异步收发器 )。USART/UART提供
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第九讲 USART-printf打印实验
GD32F470紫藤开发板使用手册】第十一讲 SPI-SPI NOR FLASH读写实验
11.1实验内容 通过本实验主要学习以下内容: SPI简介 GD32 F470 SPI简介 SPI NOR FLASH——GD25Q32ESIGR简介 使用GD32F470 SPI 接口 实现对GD25Q32ESIGR的读写操作 11.2实验原理 11.2.1SPI简介 SPI(Serial Peripheral interface),顾名思义是串行外设接口,和 UART 不同的是,SPI是同步通讯接口,所以带有 时钟 线,而UART是异步通讯接口,不需要时钟线。 SPI通常使用4根线,分别为SCK、MOSI、MISO、NSS(CS): SCK:串列时脉,由主机发出 MOSI:主机输出从机输入 信号 (数据由主
[单片机]
【<font color='red'>GD32F470</font><font color='red'>紫藤</font><font color='red'>派</font><font color='red'>开发板</font>使用手册】第十一讲 SPI-SPI NOR FLASH读写实验
AVR外部中断INT1检测按键,使用LED作指示
实验内容: 使用AVR的外部中断INT1检测PD3Key,如果有按键按下,则唤醒休眠的MCU,并使它的PB口的LED做加1指示。 #include iom16v.h #define DISP_DDR DDRB #define DISP_PORT PORTB #define IN_PD3 cbi(DDRD,3) //PD3 #define SET_PD3 sbi(PORTD,3) #define GET_PD3 gbi(PIND,3) //PORTA|=BIT(5); 就是把把第6位置1; //PORTA=~BIT(5); 就是把第6位置零 //DDRB |= 0x80; //等于“sbi(DDRB,7);” 置1位
[单片机]
【GD32F303红枫开发板使用手册】第四讲 GEXTI-按键中断检测实验
4.1实验内容 通过本实验主要学习以下内容: EXTI中断原理; 按键中断检测原理; 4.2实验原理 4.2.1NVIC中断向量控制器 介绍EXTI之前,首先为各位读者介绍NVIC中断向量控制器,NVIC为M4内核组件,用于实现高效的异常和中断处理。NVIC可以支持抢占以及咬尾中断,具有多达68种外设中断以及4位中断优先等级配置(最多支持16个中断有限等级),当中断或异常产生时,系统自动将当前处理器工作状态压栈,在执行完中断服务子程序(ISR) 后自动将其出栈。 GD32F303系列MCU的中断向量表如下表所示(包含异常中断)。 有关NVIC中断相关配置函数可参考gd32f30x_misc.c,其中主要有以下几个函数
[单片机]
【GD32F303红枫<font color='red'>派</font><font color='red'>开发板</font>使用手册】第四讲 GEXTI-<font color='red'>按键</font><font color='red'>中断</font><font color='red'>检测</font>实验
学51单片机-按键中断检测
接着昨天,继续说按键的事。昨天说的是扫描检测,今个说一下中断检测。先插播一个小故事~~ 当年我和凯凯学单片机的时候,我用扫描检测的方法做的项目,他用中断检测的方法做的项目。当我俩坐一起交流按键检测的方式时,他火了,直接跳起来跟我吼:你不用中断怎么检测? 当时我就意识到他可能陷入了只能用中断的误区,然后就乐呵呵的说:用扫描啊~ 他继续吼,我继续乐,我俩就这样陷入了死循环。终于都累了,然后把程序和原理给他看,了解~ 在STC89C52单片机上,具有外部中断功能的引脚有两个:P3.2 –INT0 和 P3.3-INT1。上电默认的情况下,他们是普通IO引脚;当配置好相关寄存器之后,他们就变成
[单片机]
学51单片机-<font color='red'>按键</font>的<font color='red'>中断</font><font color='red'>检测</font>
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved