STM32(江科大)——中断系统学习心得(分析EXTI和NVIC)

 

中断的几个概念:

中断的执行流程

EXTI(外部中断)

NVIC

NVIC管理中断,赋予中断优先级的作用

一个外设有多个中断通道,而NVIC是对对应得中断通道(EXTILineX对应ChannelX)进行优先级排序。然后自己根据中断的优先级,一次只告诉CUP执行一个中断。形象一点的比喻是医生看病,外面的排队的病人就是中断,而医生是CUP,因为医生是处理病情的(主程序),为了节约医生的时间和经历,由NVIC(助理)来为这些病人(中断)排序,也由NVIC(助理)叫号(将中断信号发给CPU)。

NVIC优先级分组:

中断优先级分为抢占优先和响应优先。

抢占优先:可以打断低一级的中断,进行循环嵌套。相当于医生在看病,突然外面来了一个快要不行的病人,医生停下当前病人(中断)去看更危险的1病人(中断)

响应优先级:优先排队,一定要等高优先级的中断响应完才能响应。(病人排队,不能插队)

在STM32里面,中断不讲究先来后到,而是讲究优先级。

优先级:抢占>响应

        相同性质的优先级,数字小的优先级高

Tips:在一个工程里面,只有一个NVIC分组,因此在一个工程里面,如有其他中断,则优先级分组必须相同。

中断的基本机构:

AFIO中断引脚选择:

每个GPIO口既可以做定时器口还可以做中断触发源,还有ADC采集之类的(功能复用)

(每个功能的要求都不一样所以,这也是为什么使用GPIO口要对GPIO口初始化,输入输出方式,响应速度等)

而AFIO的作用就是将GPIO口赋予一个特定的功能,这里赋予的是:中断引脚的选择

利用代码:

GPIO_EXTILineConfig(_,_)

来将指定的GPIO口连到(复用到)EXTI中断线路上

相同的Pin口不能同时用作中断

EXIT边沿检测及其控制

对中断进行初始化,包括中断线路的选择,中断触发方式,中断模式(事件or软件),以及中断线路的开启(PVD,RTC,USB,ETH还没学,所以这里没写,见谅)

需要注意的是 IO口和中断线路是一一对应的(包括NVIC的Channel),因此在中断的初始化里面,也是对特定的EXTILine进行初始化配置的。也就是说,每一条中断线路都需要单独配置(复杂,但是因为复杂,可以有更多可能性和组合方式以同时应对不同的需求)

然后就是NVIC的配置

在进行NVIC配置时要先对NIVC进行优先级分组(每个工程只能有一个分组)

NVIC初始化包括

对于的Channel线路的选择(NVIC_InitStructure.NVIC_IRQChannel=;

(这个和前面的GIPO口EXTILine也是一一对应的)

中断允许--------(NVIC_InitStructure.NVIC_IRQChannelCmd= ;

响应优先级排序-----------(NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= ;

抢占优先级排序------------(NVIC_InitStructure.NVIC_IRQChannelSubPriority= ;

最后就是中断函数,中断函数名也和GPIO,EXTILine Channel一一对应

要注意的是,中断函数里里面,在程序的最后需要对中断标志位清零,否则程序会一直进入中断,从而死机。同理,如果启动了中断而没有中断函数(或者不对中断标志位清零)程序依然会卡死

同时中断函数是无参无返回值的,如果要读取中断函数里面的数据需要再用一个函数

外部中断配置的流程

(打通上图的各个环节)

  1. 开启GPIO和AFIO的时钟
  2. 初始化GPIO口 注意配置为上拉模式
  3. AFIO中断线路的选择 来将指定的GPIO口连到(复用到)EXTI中断线路上
  4. EXTI的初始化配置
  5. NVIC优先级分组
  6. NVIC配置
  7. 中断函数

代码部分:

开启时钟

配置GPIO

AFIO中断线路的选择

中断线配置

配置NIVC分组

配置NVIC

中断函数

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜雨悠悠故人故

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值