STM32以Cortex-M3处理器为核心,是一个标准化的微控制器结构,CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,赋予每个中断源单独的优先级。
之前没有仔细的研究手册,另外也只是写一些简单的驱动测试程序,没有真正用到中断嵌套相关的内容,今天在进行程序调试的时候才发现,高优先级的中断发生了,而低优先级的中断函数依旧在运行,换句话说也就是没有实现“嵌套抢占”,跟我预期的有出入啊,于是仔细研读手册中相关的章节,才恍然大悟:原来我误解了这句话“高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。而抢占优先级相同的中断,高优先级的响应优先级不可以打断低响应优先级的中断。”
STM32的优先级分为两组,抢占式优先级和从优先级,只有抢占式优先级高的中断才可以实施“抢占”,也就是实现中断的嵌套,当两个中断的抢占式优先级相同时,如果从优先级低的先进入中断,此时发生从优先级高的中断,然而从优先级高的中断是不能够抢占目前正在运行的从优先级低的中断的,他只能等待当前的中断退出后才能够进入中断,也就是从优先级不具有“抢占”的功能。
粗心大意害人不浅啊,受教育了。