RT-Thread零基础快速入门第5讲——外部中断

目录

    • 一、前言
        • 源码链接
    • 二、编程讲解
    • 三、项目实战
    • 四、结束语

一、前言

这一讲,我要讲的是外部中断,也不知道是太简单了还是没有人用,我没找到比较完整的关于RT-thread外部中断的教程,只发现RT-thread文档中心的PIN设备里面有提及中断相关的函数。不管怎样,我觉得外部中断平常用的还是很多的,至少我在使用RT-thread之前是经常会用到,好了,废话不多说,马上开始进入我们的教程。

源码链接

我发布的所有关于RT-thread的教程源代码都在下面这个链接里面,随着我教程的更新,新的代码也会加入进去。
教程源码下载链接:https://pan.baidu.com/s/1N2D8dM31deKIqNqaIQfPiA
提取码:7nsx

二、编程讲解

第一步:配置外部中断
RT-Thread零基础快速入门第5讲——外部中断_第1张图片
从这个函数的描述我们可以很清楚的看到,只要调用上面这个函数就可以配置成外部中断脚,中断触发的方式,以及回调函数(等同于中断服务函数),而且回调函数的名称我们还可以自由定义,不像我们用裸机程序的时候,中断服务函数是已经固定了的。
第二步:使能中断
直接调用下面这个函数即可。
RT-Thread零基础快速入门第5讲——外部中断_第2张图片
第三步:自己定义一个回调函数
因为RT-thread的外部中断没有固定的中断服务函数,所以我们需要自己定义一个,示例如下:

/* 自己定义一个回调函数,相当于中断服务函数 */
void IQR_HANDALE_KEY0(void *args)
{
     
    rt_pin_write(LED0_PIN, PIN_LOW);//点亮LED0
}

三、项目实战

因为这个两个函数原本在pin.c里面就有定义,所以我们也不需要自己去写,直接调用就行了。
我这里用两个按键,KEY0按下,触发外部中断,点亮LED1,KEY1按下,熄灭LED1,示例代码如下:

#include 
#include 
#include 

#define LED0_PIN    GET_PIN(F, 9)
#define LED1_PIN    GET_PIN(F, 10)
#define KEY0_PIN    GET_PIN(E, 4)
#define KEY1_PIN    GET_PIN(E, 3)

/* 自己定义KEY0的回调函数,相当于中断服务函数 */
void IQR_HANDALE_KEY0(void *args)
{
     
    rt_pin_write(LED0_PIN, PIN_LOW);//点亮LED0
}

/* 自己定义KEY1的回调函数,相当于中断服务函数 */
void IQR_HANDALE_KEY1(void *args)
{
     
    rt_pin_write(LED0_PIN, PIN_HIGH);//熄灭LED0
}

int main(void)
{
     
    int i = 0;

    /* 把LED引脚设置为输出 */
    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
	
    /* 先把两个灯关掉 */
    rt_pin_write(LED0_PIN, PIN_HIGH);
    rt_pin_write(LED1_PIN, PIN_HIGH);

    /* 把KEY引脚设置为输入 */
    rt_pin_mode(KEY0_PIN, PIN_MODE_INPUT);
    rt_pin_mode(KEY1_PIN, PIN_MODE_INPUT);

    /* 绑定中断,下降沿模式,回调函数名为IQR_HANDALE_KEY0 */
    rt_pin_attach_irq(KEY0_PIN, PIN_IRQ_MODE_FALLING, IQR_HANDALE_KEY0, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(KEY0_PIN, PIN_IRQ_ENABLE);

    /* 绑定中断,下降沿模式,回调函数名为IQR_HANDALE_KEY1 */
    rt_pin_attach_irq(KEY1_PIN, PIN_IRQ_MODE_FALLING, IQR_HANDALE_KEY1, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(KEY1_PIN, PIN_IRQ_ENABLE);

    while (1)
    {
     
        rt_pin_write(LED1_PIN, PIN_LOW);//点亮LED1
        rt_thread_mdelay(1000);
        rt_pin_write(LED1_PIN, PIN_HIGH);//熄灭LED1
        rt_thread_mdelay(1000);
    }
}

四、结束语

好了,关于外部中断的编程讲解就到这里,如果还有什么问题可以私信给我。如果需要本文对应的源码的话可以在博文前言部分的链接下载。
如果觉得这篇文章对你有用,点赞+关注支持一下博主呗。
后续我会继续更新RT-thread入门教程系列,如果感兴趣的同学可以关注一下博主,谢谢!

你可能感兴趣的:(RT-thread,单片机,Rt-thread)