嵌入式-STM32-中断系统与外部中断

概念
中断、中断源、中断向量、中断优先级、中断服务函数等。

ARMCortexM3支持256个中断,包括16个内核中断和240个外设中断,拥有256个中断优先级别。

STM32中断通道可能会由多个中断源共用,某个中断服务函数入口处需要一个判断机制,辨别是哪个中断。只能判断引脚号,不能判断端口号,如下:

void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{
    if(GPIO_Pin==GPIO_PIN_0)
    {
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_0);
    }
    if(GPIO_Pin==GPIO_PIN_13)
    {
        HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_1);
    }

}

STM32有两个优先级:抢占优先级和响应优先级,每个中断都需要指定这两种优先级。例如指定EXTI0为抢占优先级。

CortexM3内核中有一个嵌套向量中断控制器,NVIC,的设备,对中断进行统一的协调和控制。其中最主要的工作就是控制中断使能和确定中断优先级。

STM32外部中断
STM32芯片有16个外部中断源EXTI0~EXTI15,分别对应着7个中断向量,也就是对应着7个中断服务函数。

  1. EXTI0、EXTI1、EXTI2、EXTI3、EXTI4属于专用外部中断源,对应入口0~入口4.
  2. EXTI5~EXTI9属于共用外部中断源,对应入口5。
  3. EXTI10~EXTI15属于共用外部中断源,对应入口6。
    EXTI0的连接引脚是PA0~PG0,即每个端口组的0号引脚,其他EXTI1等以此类推。
    在这里插入图片描述
    外部中断的触发条件
    上升沿触发,下降沿触发,双边沿触发,不能使用电平触发的方式,只能采用边沿触发。

外部中断程序设计步骤

传统的STM32外部中断设计步骤

  1. 将GPIO初始化为输入端口
  2. 配置相关的I/O引脚与中断线的映射关系
  3. 设置该I/O引脚对应的中断触发条件
  4. 配置NVIC,并使能中断
  5. 编写中断服务函数

基于STM32CubeMx的外部中断设计步骤

  1. 在STM32CubeMx中指定引脚为中断模式,配置中断初始化参数,包括下拉输入、对应边沿触发,使能NVIC等等
  2. 重写I/O引脚对应的中断回调函数,void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
    在这里插入图片描述
    在这里插入图片描述
    外部中断跳转:在最后把回调函数重写到main.c中,多个中断只需写在一个回调函数中即可。在这里插入图片描述
    回调函数重写:检测到对应开关GPIO口中断则使小灯状态翻转
    在这里插入图片描述
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值