NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用

NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用

1、简述

NUCLEO-F411RE开发版的蓝色按键对应PC13管脚,我们将其配成外部中断的方式,并设置低电平触发。

2、测试代码

驱动其实对应的还是之前移植好的pin驱动,所以这里不需要修改。
测试代码也比较简单,如下:

void key_irq_handle(void *args)
{
    if (rt_pin_read(BLUE_KEY_PIN) == 0)
    {
        rt_kprintf("user key press ! \n");
    }
}

int key_init(void)
{
    /* 按键0引脚为输入模式 */
    rt_pin_mode(BLUE_KEY_PIN, PIN_MODE_INPUT_PULLUP);
    /* 绑定中断,上升沿模式,回调函数名为key_irq_handle */
    rt_pin_attach_irq(BLUE_KEY_PIN, PIN_IRQ_MODE_FALLING, key_irq_handle, RT_NULL);
    /* 使能中断 */
    rt_pin_irq_enable(BLUE_KEY_PIN, PIN_IRQ_ENABLE);
    return 0;
}


MSH_CMD_EXPORT(key_init , Key Exti Test);

3、驱动代码分析

裸机编程时,我们知道,gpio外部中断有十六条外部中断线,pc13对应的是编号为13的中断线。对应的中断函数为EXTI15_10_IRQn。

rt_pin_attach_irq函数

rt_pin_attach_irq —>>>> stm32_pin_dettach_irq
stm32_pin_dettach_irq()中设置了中断的触发方式,中断处理函数,中断管脚等。
设置的这些参数放在了pin_irq_hdr_tab这个变量里。
NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用_第1张图片

rt_pin_irq_enable函数

rt_pin_irq_enable —>>> stm32_pin_irq_enable
根据pin_irq_hdr_tab变量的赋值情况,调用hal库的设置中断函数。
NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用_第2张图片

4、现象

在msh里输入 key_init
在我们按下按键后,终端会有user key press ! 字样打印。
NUCLEO-F411RE RT-Thread 体验 (7) - GCC环境外部中断的使用_第3张图片

5、代码

代码下载

你可能感兴趣的:(RT-Thread,单片机,stm32,嵌入式硬件)