Cortex-M3/M4内核NVIC及HAL库函数详解(4):使用HAL库配置外部中断

0 工具准备

Keil uVision5
Cortex M3权威指南(中文)
Cortex M3与M4权威指南
stm32f407的HAL库工程
STM32F4xx中文参考手册

1 使用HAL库配置外部中断

前面我们已经熟悉了有关内核部分的寄存器配置,接下来我们结合stm32f407的GPIO外设,从实战角度进一步加深对这些寄存器的认识。

1.1 原理图分析

我们这里使用GPIO的
我们这里使用PA0作为输入引脚,可以看到SW1未按下时为低电平,按下时为高电平。我们我们想要在SW1按下时触发中断,只需要配置PA0端口为上升沿触发即可。

1.2 初始化PA0

/**
 * @brief 初始化SW1中断
 * 
 */
void init_sw1_interrupt(void)
{
   
    GPIO_InitTypeDef GPIO_InitStructure;

    // 使能GPIOA时钟
    __GPIOA_CLK_ENABLE();

    GPIO_InitStructure.Pin = GPIO_PIN_0;
    // 配置上升沿触发
    GPIO_InitStructure.Mode = GPIO_MODE_IT_RISING;
    GPIO_InitStructure.Pull = GPIO_NOPULL;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 设置中断优先级为(2,2)
    HAL_NVIC_SetPriority(EXTI0_IRQn, 2, 2);
    // 清中断标志
    __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
    // 使能中断
    HAL_NVIC_EnableIRQ(EXTI0_IRQn);
}

该函数操作步骤如下:
(1)使能GPIOA时钟
(2)设置PA0为浮空输入模式,上升沿触发
(3)初始化PA0
(4)设置中断优先级分组为2
(5)设置中断优先级为(2,2)
(6)清中断标志
(7)失能EXTI0中断请求(PA0的中断请求是映射到EXTI0上的)

1.3 编写中断服务函数

/**
 * @brief EXIT0中断服务函数
 * 
 */
void EXTI0_IRQHandler(void)
{
   
    // 查看是否产生了有效中断
    if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0) != RESET)
    {
   
        printf("SW1 press down\r\n");
        // 清除中断标志位
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_PIN_0);
    }
}

进入中断服务函数的首要工作就是检查是否产生了符合预期的中断,如果是的话则执行相应的操作,最后清除中断标志。

1.4 中断测试

完成PA0的初始化后,我们手动按下KEY1,可以看到打印出了中断服务函数内的信息:
在这里插入图片描述
至此,使用HAL库配置外部中断大功告成。

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 14:44:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 14:44:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 14:44:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 14:44:03       20 阅读

热门阅读

  1. SQL字典

    2024-01-21 14:44:03       31 阅读
  2. 肿瘤面积(c++题解)

    2024-01-21 14:44:03       35 阅读
  3. docker 部署 springboot 2.6.13 jar包流程笔记

    2024-01-21 14:44:03       37 阅读
  4. 191. 位1的个数

    2024-01-21 14:44:03       34 阅读
  5. ElasticSearch 7.x现网运行问题汇集2

    2024-01-21 14:44:03       32 阅读
  6. [LeetCode]-动态规划-4

    2024-01-21 14:44:03       28 阅读
  7. 单例模式实现及优化(C++11)

    2024-01-21 14:44:03       31 阅读