首页 > 代码库 > STM32_中断
STM32_中断
为什么要用中断?
常用的现实生活中的例子是,如果你正在看电视,门铃响了你该咋整?
这里门铃响了就是一个中断(interrupt),我们放下电视去开门就是一个中断服务子程序(ISP)
STM32的中断介绍
Cortex-M3 内核支持 256 个中断,包括 16 个内核中断和 240 个外部中断;
STM32F10x 有 84 个中断通道,包括 16 个内核中断和 68 个可屏蔽中断,也就是只用了 Cortex-M3 中断的一部分;
中断可以分配优先级,有的是固定死的,有的可以自定义。
中断会分配到具体外设,这在 stm32f10x 文档中中断向量表中可查找;
NCIV介绍
STM32 中断这么多,我们该怎么管理呢?
NVIC(Nested Vectored Interrupt Controller),嵌套向量中断控制器就是用来管理中断的,它是 M3 内核的一个外设;
STM32 并没有用 Cortex-M3 NVIC 的全部功能,而是对它进行了裁剪;
NVIC 相关的定义在 misc 和 core_cm3 中;
NVIC 寄存器结构体的定义就在 core_cm3 中;
中断优先级
STM32F103 芯片支持 60 个可屏蔽中断通道,每个中断通道都具备自己的 8 位中断优先级控制字节;
但 STM32 只用其中的高四位,还把这 4 位分成了抢占式优先级和响应式优先级,每个中断源都要指定这两种优先级;
抢占式优先级比响应式优先级优先级还高,也就是说在后者相同的情况下,前者级别高的中断先执行;
高抢占式优先级的中断会打断正在运行的主程序或低抢占式的中断,也就是可以中断嵌套;
但如果它们抢占式优先级一样,那不能嵌套,只能排队,一个一个来(两者都一样的话根据中断向量表中的顺序,靠前的先执行);
中断优先级分组
前面说,STM32 用四位来设置两种优先级,那就有以下五组情况:
第 0 组:4 位都用来设置响应优先级;
第 1 组:高 1 位指定抢占式,低 3 位指定响应式
第 2 组:高 2 位指定抢占式,低 2 位指定响应式
第 3 组:高 3 位指定抢占式,低 1 位指定响应式
第 4 组:4 位都用来设置抢占式优先级;
中断配置
中断配置大概有这么几步:
1. 打开对应外设外设
2. 设置中断优先级分组
3. 配置中断优先级
4. 编写中断服务程序 ISP,中断函数有固定的函数名,启动文件可查;
STM32_中断