STM32基础之中断

STM32中断很强大,STM32中断可以嵌套,任何外设都可以产生中断,其中中断和异常是等价的.

中断概述

中断,在单片机中占有非常重要的地位。代码默认地从上向下执行,遇到条件或者其他语句,会按照指定的地方跳转。而在单片机执行代码的过程中,难免会有一些突发的情况需要处理,这样就会打断当前的代码,待处理完突发情况之后,程序会回到被打断的地方继续执行。

中断类型

  • 系统异常,体现在内核水平(10个)
  • 外部中断,体现在外设水平(60个)
    有关系统异常和外部中断的清单可查阅参考手册第9章的
    向量表部分。

NVIC简介

NVIC:嵌套向量中断控制器,属于内核外设,管理着包括内核和片上所有外设的中断相关的功能。
两个重要的库文件:
core_cm3.hmisc.h,NVIC的库函数定义全在misc.h
在这里插入图片描述
在配置中断的时候我们一般只用ISER、ICER和IP这三个寄存器,ISER用来使能中断,ICER用来失能中断,IP用来设置中断优先级。

中断优先级定义

优先级设定:NVIC->IPRx
在这里插入图片描述
通过NVIC_PriorityGroup函数。
在这里插入图片描述

优先级分组:SCB->AIRCR:PRIGROUP[10:8]
在这里插入图片描述

中断编程顺序

1、使能中断请求

如何使能,需要配置哪个寄存器?

注意:这里与NVIC中的中断使能寄存器不是等同概念,这个具体由每个外设的相关中断使能位控制。比如串口有发送完成中断,接收完成中断,这两个中断都由串口控制寄存器的相关中断使能位控制。

2、配置中断优先级分组

如何配置,需要配置哪个寄存器?

通过NVIC_PriorityGroup函数。
NVIC_PriorityGroupConfig(uint32_t NVIC_PriorityGroup)
//misc.c 96行

3、配置NVIC寄存器,初始化NVIC_InitTypeDef;(定义在misc.h中,成员如下)

1-NVIC_IRQChannel:指定中断源

2-NVIC_IRQChannelPreemptionPriority:抢占优先级

3-NVIC_IRQChannelSubPriority:子优先级

4-NVIC_IRQChannelCmd:使能或者失能

4、编写中断服务函数

在启动文件 startup_stm32f10x_hd.s 中我们预先为每个中断都写了一个中断服务函数,只是这些中断函数都是为空,为的只是初始化中断向量表。实际的中断服务函数都需要我们重新编写,为了方便管理我们把中断服务函数统一写在 stm32f10x_it.c 这个库文件中。关于中断服务函数的函数名必须跟启动文件里面预先设置的一样,如果写错,系统就在中断向量表中找不到中断服务函数的入口,直接跳转到启动文件里面预先写好的空函数,并且在里面无限循环,实现不了中断。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值