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这个变量里。
rt_pin_irq_enable函数
rt_pin_irq_enable —>>> stm32_pin_irq_enable
根据pin_irq_hdr_tab变量的赋值情况,调用hal库的设置中断函数。
4、现象
在msh里输入 key_init
在我们按下按键后,终端会有user key press ! 字样打印。
5、代码
代码下载