查看: 4786  |  回复: 0
stm32的HAL库开发学习笔记之外部中断

主题

回复
发表于2018-10-25 20:53:19 | 显示全部楼层
1# 电梯直达

外部中断

中断线————EXTI线0~15(对应外部IO口的输入中断)

每个IO口都可以作为外部中断输入
每个中短线可以独立的配置触发方式(上升沿,下降沿,双边沿),触发/屏蔽,专用状态位。 

GPIO与中断线映射关系

EXTI0->PA0,PB0,PC0,……PI0
EXTI1->PA1,PB1,PC1,……PI1
........................
EXTI15->PA15............
具体引脚通过配置寄存器SYSCFG_EXTIRx选择,四位,选择16个IO口 

七个中断服务函数

EXTI0_IRQHandler
EXTI1_IRQHandler
EXTI2_IRQHandler
EXTI3_IRQHandler
EXTI4_IRQHandler
EXTI9_5_IRQHandler      (共用)
EXTI15_10_IRQHandler   (共用) 

外部中断配置

GPIO_InitTypeDef GPIO_Initure; 

GPIO_Initure.Pin=GPIO_PIN_0; //PA0

GPIO_Initure.Mode=GPIO_MODE_IT_RISING; //上升沿触发

GPIO_Initure.Pull=GPIO_PULLDOWN; HAL_GPIO_Init(GPIOA,&GPIO_Initure) (只需在GPIO初始化时设置MODE即可)

通用中断处理函数(位于gpio.c)

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{
    if(__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != RESET)
    {  
        __HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);
        HAL_GPIO_EXTI_Callback(GPIO_Pin);//中断回调函数
    }
}

    中断回调函数
    void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    {
        switch(GPIO_Pin)
        {
        case GPIO_PIN_0:
            //控制逻辑
            break;
        case GPIO_PIN_2:
            //控制逻辑
            break;
        }
    } 

外部中断一般配置步骤

1.使能IO口时钟。
2.初始化IO口,设置触发方式(输入方式):HAL_GPIO_Init();
3.设置中断优先级,并使能中断通道。
4.编写中断服务函数: 
    函数中调用外部中断通用处理函数HAL_GPIO_EXTI_IRQHandler。
5.编写外部中断回调函数:HAL_GPIO_EXTI_Callback;
(该函数由通用中断处理函数HAL_GPIO_EXTI_IRQHandler调用)

主题

回复
  • 温馨提示: 标题不合格、重复发帖、发布广告贴,将会被删除帖子或禁止发言。 详情请参考: 社区发帖规则
  • 您当前输入了 0 个文字。还可以输入 8000 个文字。 已添加复制上传图片功能,该功能目前仅支持chrome和火狐

禁言/删除

X
请选择禁言时长:
是否清除头像:
禁言/删除备注:
昵 称:
 
温馨提示:昵称只能设置一次,设置后无法修改。
只支持中文、英文和数字。

举报

X
请选择举报类型:
请输入详细内容:

顶部