STM32(十六)中断

一、什么是中断?

暂停原先的程序或事情,执行另外一些程序或事情,执行完成后返回原来的程序。

二、为什么要中断

因为另一些程序或事情比你原先正在做的事情要重要,或者这些突发事情你是无法控制它的来临的。

三、中断的分类

按不同方法进行分类

  •  内部中断,外部中断 (向量表中灰色为内部)。
  • 可设置中断,固化中断。
  • 中断向量表 (cl级别的芯片有10个内部 ,0~67个外部,一些没用到,其中通用化 中断编号0~17,个性化中断编号18~67)。
  • 优先级别 (由主优先级和从优先级组成,主从优先级可以通过4个位进行设置)。

四、中断的组成

  • 具体中断的名称。
  • 中断的地址 用来保存一条跳转指令,跳到哪里去。

五、中断的特点

STM32的中断NVIC是嵌入CORTEX内核的。

  • 中断的反应的速度就很快。
  • 中断可以实现标准化(上面两点是ARM公司做的)
  • 所有外部IO端口都可以作为外部中断(上面一点是ST公司做的)
  • 有不同的优先级,只有主优先级相同的中断才可以嵌套。

六、中断的配置流程

  1. 时钟配置
  2. GPIO配置
  3. 外设中断配置(EXTI中断也属于外设中断)
  4. NVIC总中断配置
  5. 中断程序编写

七、中断几个概念区分

  NVIC,NVIC 外设中断,NVIC 外部接口中断 EXTI。简单来说 NVIC>NVIC外设中断>EXTI.

    抢占优先级:高优先级的中断打断低优先级的中断。

     响应优先级:正在执行的中断不能被;多个优先级同时到达时,优先执行响应优先级高的中断。

八、中断服务函数的特点

1)  中断服务函数没有参数没有返回值

2)  中断服务函数名是固定的,在在CORE里面的start_stm32f40_41xxx.s这个汇编里面找

3)  中断服务函数一定要清楚中断标志位

4)  中断服务函数不需要调用不需要声明

5)  中断服务函数尽可能不要出现延时或者死循环

九、为什么中断服务函数没有返回值,也没有参数?

   中断服务函数发生在裸机上,不能带返回值和参数;因为在裸机中,在启动文件中事先申明中断入口,在程序运行中中断都是硬件自动调用,没有程序去给他传递参数,也不没有相应的硬件去接收参数。

 

在汇编中用EXPORT导出函数名,并用该函数名作为汇编代码段的标识

汇编ARM指令DCD:用于分配一片连续的字存储单元并用指定的数据初始化

[weak] 的意思是该函数优先级比较弱,如果其它地方定义了一个同名函数,那么此处的这个函数就被取代了。

参考博客:

https://blog.csdn.net/weixin_34302798/article/details/85999046

https://www.cnblogs.com/King-Gentleman/p/5252522.html

原文地址:https://www.cnblogs.com/yuanqiangfei/p/14307476.html