(二)STM32 中断

一、异常与中断

  • 系统异常体现在内核水平,外部中断体现在外设水平。
  • STM32F4xx中文参考手册的向量表中列出了STM32F42xxx所有的系统异常和外部中断。
    在这里插入图片描述

二、NVIC(Nested Vectored Interrupt Controller)

  • 嵌套向量中断控制器,是内核里面的一个外设,用于控制整个芯片中断相关的功能。
1. NVIC寄存器介绍
  • NVIC结构体定义如下,位于固件库core_cm4.h文件中
    在这里插入图片描述
  • 在配置中断时,我们通常只使用ISER、ICER和IP这三个寄存器,ISER用于使能中断,ICER用
    于失能中断,IP用于设置中断优先级。

三、优先级

NVIC使用中断优先级寄存器NVIC_IPRx来配置外部中断的优先级,IPR宽度为8bit,原则上每个外部中断可配置的优先级为0~255,数值越小,优先级越高。但绝大多数CM4芯片都会精简设计,以致实际上支持的优先级数减少,在F429中,只使用了高4bit:
在这里插入图片描述

  • 用于表达优先级的这4bit,又被分组成主优先级( 抢占优先级)和子优先级。
  • 在有多个中断同时响应时,抢占优先级高的中断会优先执行。
  • 若抢占优先级相同,则比较子优先级,子优先级高的中断会优先执行。
  • 若抢占优先级、子优先级均相同,则比较硬件中断编号(即向量表中位置列的编号),编号越小,优先级越高。

四、优先级分组

  • 优先级分组用于确定抢占优先级与子优先级所占位数
  • 如NVIC_PriorityGroup_1表示,分配1bit表示抢占优先级,3bit表示子优先级。
    在这里插入图片描述
  • 在编程中,可通过调用库函数NVIC_PriorityGroupConfig()来设置优先级分组。
  • 有关NVIC中断相关的库函数都在库文件misc.c和misc.h中。

五、中断编程流程

1. 使能外设某个中断
  • 涉及具体的外设中断使能控制位,如串口发送完成中断、接收完成中断都由串口控制寄存器的相关中断使能位控制。
2. 配置中断优先级分组
3. 初始化NVIC_InitTypeDef 结构体

在这里插入图片描述

  • 注:中断源已经定义好了,不能自定义或写错,在stm32f4xx.h文件查找即可:
    在这里插入图片描述
4. 编写中断服务函数
  • 启动文件startup_stm32f429_439xx.s 预先为每个中断都编写了一个中断服务函数,但这些中断函数都是空的,尽是为了初始化中断向量表。
  • 实际开发中,我们需要重新编写中断服务函数,且通常统一写在stm32f4xx_it.c文件中。
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值