0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

按键外部中断的软件设计

瑞萨嵌入式小百科 来源:野火电子 2025-09-23 10:02 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

15.3.2

软件设计

15.3.2.1

新建工程

对于e2studio开发环境

拷贝一份我们之前的e2s工程“11_GPIO_LED”,然后将工程文件夹重命名为“16_ICU_External_IRQ”,最后再将它导入到我们的e2studio工作空间中。

对于Keil开发环境

拷贝一份我们之前的Keil工程“11_GPIO_LED”,然后将工程文件夹重命名为“16_ICU_External_IRQ”,并进入该文件夹里面双击Keil工程文件,打开该工程。

工程新建好之后,在工程根目录的“src”文件夹下面新建“key”文件夹,再进入“key”文件夹里面新建源文件和头文件:“bsp_key_irq.c”和“bsp_key_irq.h”。工程文件结构如下。

列表1:文件结构

左右滑动查看完整内容

16_ICU_External_IRQ
├─ ......
└─src
├─ led
│ ├─ bsp_led.c
│ └─ bsp_led.h
├─ key
│ ├─ bsp_key_irq.c
│ └─ bsp_key_irq.h
└─ hal_entry.c

15.3.2.2

FSP配置

首先打开“16_ICU_External_IRQ”项目的FSP配置界面,接下来我们要在这个界面里配置芯片的引脚及其相应的功能。

以野火启明6M5开发板为例,首先配置引脚连接到ICU的中断通道。

d19290c0-8dfc-11f0-8c8f-92fbcf53809c.png

点击可查看大图

然后,依次点击“Stacks”->“NewStack”->“Input”->“ExternalIRQ”来加入外部中断模块,如下图所示。由于使用两个按键,需要两个外部中断,所以这里需要加入2个外部中断模块。

d1ed447a-8dfc-11f0-8c8f-92fbcf53809c.png

点击可查看大图

第一个外部中断模块设置的是按键1的外部中断配置,按如下图所示进行设置:

d2472a44-8dfc-11f0-8c8f-92fbcf53809c.png

点击可查看大图

第二个外部中断模块设置的是按键2的外部中断配置,按如下图所示进行设置:

d2a2e5fa-8dfc-11f0-8c8f-92fbcf53809c.png

点击可查看大图

外部中断模块(r_icu)的属性介绍如下表所示。

表4 External IRQ属性介绍:

开发板按键引脚分配和中断号

d2fd6a7a-8dfc-11f0-8c8f-92fbcf53809c.png

点击可查看大图

配置完成之后可以按下快捷键“Ctrl+S”保存,最后点右上角的“GenerateProjectContent”按钮,让软件自动生成配置代码即可。

15.3.2.3

按键外部中断初始化函数

列表2 代码清单16_1:

外部中断初始化函数:文件结构

左右滑动查看完整内容

/* KEY 外部中断初始化函数 */
voidKey_IRQ_Init(void)
{
fsp_err_t err =FSP_SUCCESS;
/* Open ICU module */
err =R_ICU_ExternalIrqOpen(&g_external_irq9_ctrl, &g_external_irq9_cfg);
err =R_ICU_ExternalIrqOpen(&g_external_irq10_ctrl, &g_external_irq10_
→cfg);
/* 允许中断 */
err =R_ICU_ExternalIrqEnable(&g_external_irq9_ctrl);
err =R_ICU_ExternalIrqEnable(&g_external_irq10_ctrl);
}

R_ICU_ExternalIrqOpen()用于打开一个外部中断模块实例。

2.R_ICU_ExternalIrqEnable()用于使能外部中断,使能后即可触发产生外部中断。

15.3.2.4

使能FPU

因为之前的FSP配置里面Callback属性配置的都是同一个中断回调函数,因此,我们仅需实现一个中断回调函数即可。当然,中断回调函数也可设置为不同的两个函数,由用户定义。

两个按键共用key_external_irq_callback中断回调函数,并通过p_args->channel参数来判断是哪个中断通道产生了中断从而判断是哪个按键按下,该函数如下:

列表3 代码清单16_2:按键中断回调函数

左右滑动查看完整内容

/* 按键按下标志 */
volatilebool key1_sw2_press =false;
volatileboolkey2_sw3_press =false;
/*按键中断回调函数*/
voidkey_external_irq_callback(external_irq_callback_args_t *p_args)
{
/*判断中断通道*/
if(9== p_args->channel)
{
key1_sw2_press=true;//按键KEY1_SW2按下
}
elseif(10== p_args->channel)
{
key2_sw3_press=true;//按键KEY2_SW3按下
}
}

15.3.2.5

hal_entry入口函数

hal_entry入口函数如下所示:

列表4 代码清单16_3:hal_entry入口函数

自由滑动查看完整内容

/*用户头文件包含*/
#include"led/bsp_led.h"
#include"key/bsp_key_irq.h"
externvolatileboolkey1_sw2_press;
externvolatileboolkey2_sw3_press;
voidhal_entry(void)
{
/*TODO:add your own code here */
LED_Init();// LED 初始化
Key_IRQ_Init();// KEY 外部中断初始化
while(1)
{
/* 判断按键 KEY1_SW2 是否被按下 */
if(key1_sw2_press)
{
key1_sw2_press =false;//标志位清零
LED2_TOGGLE;
}
//LED2 翻转
/* 判断按键 KEY2_SW3 是否被按下 */
if(key2_sw3_press)
{
key2_sw3_press =false;//标志位清零
LED3_TOGGLE;
}
//LED3 翻转
// LED1 闪烁指示程序正在运行
LED1_TOGGLE;
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_SECONDS);//延时 1 秒
// 按键被按下触发中断后,在主循环中 LED2 或 LED3 最长会被推迟 1 秒翻转
}
#ifBSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}

15.3.3

下载验证

把编译好的程序下载到开发板并复位,按下用户按键1和按键2即可分别控制LED2和LED3灯的亮灭。同时LED1灯在每秒钟翻转一次状态。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    244

    文章

    24715

    浏览量

    692428
  • 软件设计
    +关注

    关注

    3

    文章

    65

    浏览量

    18323
  • 开发环境
    +关注

    关注

    1

    文章

    275

    浏览量

    17673
  • 外部中断
    +关注

    关注

    1

    文章

    135

    浏览量

    16691

原文标题:实验:按键外部中断的软件设计——瑞萨RA系列FSP库开发实战指南(40)

文章出处:【微信号:瑞萨嵌入式小百科,微信公众号:瑞萨嵌入式小百科】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    STM32F407 外部中断配置步骤

    介绍STM32F407外部中断配置步骤,以按键为例,实现外部中断配置,使用按键触发
    的头像 发表于 07-06 14:31 3744次阅读
    STM32F407 <b class='flag-5'>外部</b><b class='flag-5'>中断</b>配置步骤

    按键外部中断学习

    …文章目录STM32 CubeMX学习:6. 按键外部中断0 前言1 基础知识1.1 按键原理图1.2 按键
    发表于 08-16 08:34

    按键触发外部中断

    STM32F4XX 学习日志:按键触发外部中断前言任务目标设计过程硬件软件GPIO口的配置前言使用反客科技STM32F407VET6 M1的核心板,板载8M主时钟晶振(HSE),32.
    发表于 08-17 08:00

    介绍几种按键硬件、软件设计方面的技巧

    在单片机系统里,按键是常见的输入设备,在本文江介绍几种按键硬件、软件设计方面的技巧。一般的在按键的设计上,一般有四种方案:一是GPIO口直接检测单个
    发表于 11-10 07:17

    怎么实现STM32F40x外部中断软件设计

    什么是STM32F40x外部中断?怎么实现STM32F40x外部中断软件设计
    发表于 11-17 06:32

    STM32按键扫描/按键中断/外部中断资料下载

    电子发烧友网为你提供STM32按键扫描/按键中断/外部中断资料下载的电子资料下载,更有其他相关的电路图、源代码、课件教程、中文资料、英文资料
    发表于 04-13 08:45 23次下载
    STM32<b class='flag-5'>按键</b>扫描/<b class='flag-5'>按键</b><b class='flag-5'>中断</b>/<b class='flag-5'>外部</b><b class='flag-5'>中断</b>资料下载

    瑞萨单片机之外部中断实现按键的长按与短按(二)

    瑞萨单片机通过外部中断实现按键的长按与短按
    发表于 11-22 14:21 21次下载
    瑞萨单片机之<b class='flag-5'>外部</b><b class='flag-5'>中断</b>实现<b class='flag-5'>按键</b>的长按与短按(二)

    STC15单片机实战项目软件开发第三讲 - 按键检测(外部中断)

    STC15单片机实战项目软件开发第三讲 - 按键检测(外部中断)
    发表于 11-22 15:06 17次下载
    STC15单片机实战项目<b class='flag-5'>软件</b>开发第三讲 - <b class='flag-5'>按键</b>检测(<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)

    外部中断按键抖动(按键消抖)

    当我们写完一个外部中断程序测试时,例如按键计数和按键点亮led灯,我们可能会遇到一次按键按下松开却触发了多次
    发表于 11-22 15:36 28次下载
    <b class='flag-5'>外部</b><b class='flag-5'>中断</b>的<b class='flag-5'>按键</b>抖动(<b class='flag-5'>按键</b>消抖)

    STM32f10x 外部中断中断分组

    利用外部中断来实现按键控制LED灯的亮灭。实验工具:MDK5,STM32F103ZET6开发板使用固件库编程LED灯引脚PD13,按键PE0首先了解一下32的
    发表于 11-23 18:06 4次下载
    STM32f10x <b class='flag-5'>外部</b><b class='flag-5'>中断</b>及<b class='flag-5'>中断</b>分组

    STM32F407学习记录---外部中断实验

    STM32F407学习记录---外部中断概述STM32F4外部中断简介硬件设计软件设计概述将 STM32F4 的 IO 口作为
    发表于 11-29 16:06 4次下载
    STM32F407学习记录---<b class='flag-5'>外部</b><b class='flag-5'>中断</b>实验

    GD32外部中断按键问题实现)

    平台:GD32F350G8背景:工作的关系接触到了gd32的一个开发板,老板的第一个需求就是利用中断实现按键控制LED,并尝试长按短按,前后搞了好几天,到处去寻找资料,好在皇天不负有心人,全部搞定
    发表于 12-02 15:06 15次下载
    GD32<b class='flag-5'>外部</b><b class='flag-5'>中断</b>(<b class='flag-5'>按键</b>问题实现)

    STM32基本GPIO操作:按键输入(扫描+外部中断

    STM32基本GPIO操作:按键输入(扫描+外部中断)本文章向大家介绍STM32基本GPIO操作:按键输入(扫描+外部
    发表于 12-29 19:27 13次下载
    STM32基本GPIO操作:<b class='flag-5'>按键</b>输入(扫描+<b class='flag-5'>外部</b><b class='flag-5'>中断</b>)

    STM32 HAL库 CubeMX教程(四)按键外部中断

    STM32 HAL库 CubeMX教程(四)外部中断实验内容NVIC(嵌套向量中断控制器)外部中断简介CubeMX配置
    发表于 01-14 15:11 10次下载
    STM32 HAL库 CubeMX教程(四)<b class='flag-5'>按键</b><b class='flag-5'>外部</b><b class='flag-5'>中断</b>

    STM32---外部中断

    目录1.外部中断描述2.外部中断框图总结:经过分析框图,可以产生软件中断和事件
    发表于 01-14 15:25 7次下载
    STM32---<b class='flag-5'>外部</b><b class='flag-5'>中断</b>