stm32中断设置(寄存器讲解)

与51对比

对比51来说,51的中断就那么几个,但中断的分类大体都差不多,分为内部中断和外部中断。
51的内部中断是定时器中断,串口中断,外部中断是外部中断0和1.
而stm32的中断就比51多太多了,引脚多,内部资源多,所以拥有19个外部中断(包含16个GPIO中断和3个外部特定中断)
和40余个内部中断(包括定时器中断,32的定时器有3大类,共多达10余个,还有32上丰富的内部资源,包括UART,SPI,CAN,DMA等引起的中断)


所以如果像51那样仅用一个或两个寄存器就能把中断打开和设定好优先级来设置32是不现实的,所以32上有一个专门的向量中断控制器,简单来说,32的中断系统是放大的51中断系统,为了不给读者压力,在这里就从设置中断的步骤来讲解32的中断系统,读者可在其中看到与51的区别。
步骤
1

优先级分组,在这的分组并不是分成一组一组的(0-10中断是第一组,11-20…),而是设定优先级分配的格式,就好比说,我这有10个中断,那我给这10个中断设置优先级的时候要编号吧(0,1,2…9),而我分组并不是编号,而是限定编号的范围,假如你的10个中断我只给3个编号,那么我要是有5个中断同时发生不久乱套了,那你说我分10个,可以,但实际上中断的优先级是比中断数少一些的。
好吧,现在开始讲32的优先级是怎么分组的
首先在应用程序中断及复位控制(AIRCR)寄存器中找到PRIGROUP位段,这个地方是写优先级分组的,具体见下图在这里插入图片描述
这是Cortex-m3手册给的,与我们的stm32并不太一样,stm32只规定了高4位为分组位,可以设定0,1,2,3,4,一共5个组。
前面我们说了,这只是设定了优先级的格式,即我们已经做的工作是规定好了每个中断的优先级可以怎么设定。由于stm32规定取高4位为优先级分组位,也就是说每个中断的优先级有4个有效位,AIRCR是分配这四个有效位哪些是抢占优先级,哪些是子优先级。(我们绝大多数情况下只设定一次优先级分组,你想想设定多个不久乱套了吗)关于抢占优先级与子优先级就直接上个链接吧

https://blog.csdn.net/baidu_38988793/article/details/89522107

2
确定具体中断的抢占优先级与响应优先级

在进行这个步骤之前,要先了解向量表的概念,在这里我也简要说一下,向量表,大白话就是说中断的线性排列的表,由于stm32默认把每个中断函数的入口放在一个区域,称为向量表,那么如果要给这些中断分配优先级的话,也采用一种相似的方式,这个数组就在NVIC寄存器组里面,看两张图
在这里插入图片描述
在这里插入图片描述
第一张图只看NVIC的位置,第二张图就是这个寄存器组的内部结构了,在这一步骤我们先用到IP数组,看到了吧,分了240块空间,stm32用不了这么多,你设定IP[x]的高4位为响应的抢占优先级和响应优先级就可以了。

3
使能响应的中断

这一步就用到了NVIC的ISER寄存器,注意NVIC的关于使能与失能寄存器都是写1有效,ISER为8个元素,每个占32位,这就是256个中断使能,(与向量表又对应了吧)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值