stm32的CMSIS函数有什么用NVIC_ClearPendingIRQ?

What's the usage of the stm32's CMSIS function NVIC_ClearPendingIRQ?

当程序进入外部中断函数时,我可以用NVIC_SetPendingIRQ跳出到main函数。然后我在main函数中使用NVIC_ClearPendingIRQ,但是不能return回外部中断函数。所以我想知道它的正确用法。

中断可以是 (1) 挂起或未挂起,(2) 活动或不活动以及 (3) 启用或未启用。

Pending 表示排到 运行。

活动意味着 运行ning 现在(或者是 运行ning 但被更高优先级的嵌套中断抢占)。

启用意味着它可以自动从挂起状态变为活动状态。

如果中断已启用并且您从主上下文调用 NVIC_SetPendingIRQ 您已将状态更改为“不活动且未决”,但硬件会立即将此状态更改为“活动且未决” .

当中断处于活动状态时,它可以通过硬件或软件再次触发,在这种情况下它将“同时处于活动状态和待定状态”(即:运行正在排队等待 运行)。

如果你 return 在你处于活动和挂起状态时从中断函数中退出,那么你将立即再次跳回到同一个中断函数的开始(假设没有更高优先级的中断也在挂起)但是现在你将是“活跃的而不是待定的”。

如果您处于活动状态且挂起但不想 运行 中断函数两次,您可以在中断函数 return 之前调用 NVIC_ClearPendingIRQ。