X
首页
技术
模拟电子
单片机
半导体
电源管理
嵌入式
传感器
最能打国产芯
应用
汽车电子
工业控制
家用电子
手机便携
安防电子
医疗电子
网络通信
测试测量
物联网
最能打国产芯
大学堂
首页
直播
专题
TI 培训
论坛
汽车电子
国产芯片
电机驱动控制
电源技术
单片机
模拟电子
PCB设计
电子竞赛
DIY/开源
嵌入式系统
医疗电子
颁奖专区
【厂商专区】
【电子技术】
【创意与实践】
【行业应用】
【休息一下】
最能打国产芯
活动中心
直播
发现活动
颁奖区
电子头条
参考设计
下载中心
分类资源
文集
排行榜
电路图
Datasheet
最能打国产芯
GD32 MCU
[GD32L233C-START 评测] 第三篇 使用外部中断EXTI读取按键
xiaoli2018
2022-1-29 20:57
楼主
GPIO除了通用的IO功能,还可以配置外部中断源EXTI。这样当IO检测到引脚状态的变化时,可以第一时间通知MCU进行处理。 比如可以通过EXTI检测设备的外壳被打开,或者可以检测输入量的变化等。在使用外部中断的时候需要配置3个外设: - IO:配置为输入功能 - EXTI:将对应IO的输入配置为EXTI中断源 - NVIC:配置中断的优先级和使能 除了上面3个外设的配置,还需要使能相关外设的时钟,编写中断处理函数。 本例使用将按键连接的IO配置为EXTI的中断源,当按键按下时触发中断,翻转LED。 - 按键连接在PA0,PA0接了下拉电阻,当按键按下时PA0为高电平 - LED连接在PA7 ```c #define BTN_PORT GPIOA #define BTN_PIN GPIO_PIN_0 #define LED1_PORT GPIOA #define LED1_PIN GPIO_PIN_7 ``` ### IO的配置 IO的设置分为时钟使能和IO设置两部分。 ```c rcu_periph_clock_enable(RCU_GPIOA);//IO的时钟使能 //LED所接引脚设置为推挽输出模式 gpio_mode_set(LED1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_NONE, LED1_PIN); gpio_output_options_set(LED1_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED1_PIN); //按键所接引脚设置为输入模式,因为电路上有下拉电阻,因此可以设置为浮空输入模式 gpio_mode_set(BTN_PORT,GPIO_MODE_INPUT,GPIO_PUPD_NONE,BTN_PIN); ``` ### EXTI的配置 EXTI需要SYSCFG模块进行设置,因此需要使能SYSCFG的时钟。 ```c rcu_periph_clock_enable(RCU_SYSCFG);//使能SYSCFG的时钟 syscfg_exti_line_config(EXTI_SOURCE_GPIOA,EXTI_SOURCE_PIN0);//配置PA0为EXTI的中断源 exti_init(EXTI_0,EXTI_INTERRUPT,EXTI_TRIG_RISING);//配置EXTI_0检测上升沿 exti_interrupt_flag_clear(EXTI_0);//清除中断标志位 exti_interrupt_enable(EXTI_0);//在EXTI模块上使能中断 ``` ### NVIC的配置 GD32L233是Cortex-M23的内核,在其NVIC模块上只能设置4个中断优先级。 ![NVIC可配置的优先级](/data/attachment/forum/202201/29/205249in6dl5vknvdzdvvd.png.thumb.jpg) [上图的引用链接](https://developer.arm.com/documentation/ddi0550/c/nested-vectored-interrupt-controller/about-the-nvic?lang=en) ```c nvic_irq_enable(EXTI0_IRQn,2);//在NVIC中使能中断,配置优先级为2。 ``` **注意NVIC优先级只可以设置为0~3,共4个优先级,0的优先级最高。高优先级可以抢占低优先级的中断。** ### 中断处理函数 中断处理函数可以放到任何一个.c文件中,不过为了统一管理中断函数,并且满足GD32模板文件的要求,最好将中断函数都写在gd32l23x_it.c中。 有的中断的中断标志位可以通过读取操作自动清除,而有些中断的中断标志位必须手动清除,具体的操作要看芯片的手册。而EXTI的中断标志位需要手动清除。 ```c void EXTI0_IRQHandler(void) { if(exti_interrupt_flag_get(EXTI_0) != RESET){ //检测中断标志位 gpio_bit_toggle(GPIOA,GPIO_PIN_7); //翻转LED引脚状态 exti_interrupt_flag_clear(EXTI_0); //清除中断标志位 } } ``` 用户手册从第一篇文章中下载 [第一篇 GD32L233C开发资源的下载](https://bbs.eeworld.com.cn/thread-1193006-1-1.html) [第二篇 开发环境的创建](https://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=1193200&page=1&extra=#pid3119799)
本帖最后由 xiaoli2018 于 2022-1-29 20:58 编辑
点赞
回复评论
暂无评论,赶紧抢沙发吧
最新活动
报名直播赢【双肩包、京东卡、水杯】| 高可靠性IGBT的新选择——安世半导体650V IGBT
30套RV1106 Linux开发板(带摄像头),邀您动手挑战边缘AI~
安世半导体理想二极管与负载开关,保障物联网应用的稳健高效运行
免费申请 | 上百份MPS MIE模块,免费试用还有礼!
PI 电源小课堂|无 DC-DC 变换实现多路高精度输出反激电源
2024 瑞萨电子MCU/MPU工业技术研讨会——深圳、上海站, 火热报名中
随便看看
新手编译出现的一个问题,望高手出手
大量元件库分享
LPC810 DIP8 怎么不见芯片零售?
LTspice导入第三方库元件外形怎么改变?
ucos atmega128移植 二维数组赋值问题
谁学28335,找个伴?
急啊--过渡状态如何理解?
请教读取txt文件的问题
我也来点亮MSP430F5529的leds (CCSv5)
求助这个PCB是用什么工艺制作的
PSpice仿真积分电路输出问题
Cortex-M 片上仿真技术手册
zstack组网距离远远小于数据传输距离,如何实现远距离组网?
CE 6.0 驱动 OAL
[任性DIY ]采用STM8S+DS3231打造一款精美VFD语音时钟
物联网无线传输技术有哪些?
EEPROM
关于STM32的超频问题
请教Windows CE这些警告如何解决
S3C44BOX 中文数据手册(VO.3).
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
京公网安备 11010802033920号
回复
写回复
收藏
回复