stm32 外部中断疑问

1.STM32 的中断分级好像不管怎么分组之后,总共只能分出16级。。。那只能写16个中断吗?
2.STM32 的外部中断的线是很多IO口公用的,比如EXIT0是PA0,PB0,PC0。。共用,那我想用这些口,都去做EXIT0的中断管脚,然后在中断处理中判断哪个进行的中断,这样可以吗?怎么配置呢?
3.如果我希望在一个中断处理的时候,另一个中断进来,它能进行处理吗?

1、回答第一个问题:确实,不管抢占优先级与响应优先级怎么分配,只能分出16个不同的等级,但并不是代表只能写16个中断(事实上能写出16个中断必定是一个非常大的工程了),写程序时你会发现,在其他设置一切正常的情况下,不给响应中断配置中断优先级时也会运行正常,其实,这个时候,你所设置的中断处于默认设置(关于默认设置值与你所选择的中断分级组有关系),这个时候你所设置的中断的优先级配置就都一样了,那么当它们发生时“碰撞”时会怎么样呢,此时就根据时间先后顺序来判断了,也就是说先发生的中断事件优先级高,后发生的中断必须在先发生的中断服务处理完毕后才能进入终端服务处理,总之,当两个中断的优先级配置完全一样的时候,这时的优先级就与中断发生的先后顺序有关,因而你“那只能写16个中断吗”的答案时No,很多时候,不太需要可以配置中断优先级,因为大多数时候它们的发生时间不会有冲突,当然,当程序非常大且复杂的时候,这个问题就得好好研究了;个人经验,在使用定时器这一块儿,这个中断优先级配置的问题要好好斟酌一下,顺便插一句,stm32的定时器实在太强大了~~

2、回答第二个问题,答案当然是“不可以”,很确定的告诉你“不可以”,这样设置共用是没有问题的,但没法判断,也没必要进行判断,因为它们对应的都是一个中断服务程序块儿,是多对一的关系,好比楼梯道的电灯,按楼道下的开关和楼道上的开关都会触发电灯事件,这个共用的目的是扩大中断源,但中断服务函数没有改变,若能够判断的话,那么就是多个触发源对应多个中断服务程序了,这样就脱离了本意,其实提问者可以自己自问一下”为什么要这样设置,若是我也会这样设置吗“~~

3、回答第三个问题,第三个问题的意思不太明白,是这样的问题吗?”若我希望在一个中断A处理中断服务的时候,中断B也发生了(主要是运行中断A服务程序时触发了中断B),中断B的服务函数能够即刻运行吗?“若提问者的本意也是这样~~这个问题涉及到刚才所说的中断优先级了,当且中断B的优先级比中断A高时,中断B的服务函数才会运行,否则,就只能等到中断A的服务函数处理完毕后才能运行中断B的服务程序了~~或者提问者的问题是这样的:还是以第二个问题为参照:”对于EXTI0,设置了PA0、PB0、PC0...共用,PA0触发了中断然后进入了EXTI0中断服务程序处理,这个时候PB0也触发了EXTI0,这时会发生些什么“,若是这样,首先得表明这样的问题在实践中我没有遇到过,但我想是这样的:等到PA0触发的中断服务程序处理完毕,然后接着处理PB0触发的中断程序(当然,处理程序是一样的),这样的事情发生的概率比较低,除非是刻意安排的

4、啰嗦几句,看得出来,关于stm32,提问者看资料看得很仔细也很用心,但实践做得不是很多,此处建议,首先不要将相关资料当成课本去学,在你心中,应该纯属参考资料,刚开始时,遇到一些疑惑可以记录下来,然后跳过去(否则很纠结),当你积累了一些开发或说实践经验的时候回过头来看这些问题,就好理解多了~~~刚才也回答了一个问题“stm32学习是用库函数好还是直接对寄存器进行操作好”,作为初学者,我建议第一种,第一种开发相对比较慢,但更能增强对寄存器的了解,毕竟对了解寄存器是学习stm32的关键,过了一段时间之后,再去接触库函数开发模式,会觉得效率高多了,但库函数的实质还是操作寄存器~对它们都比较了解后,就觉得这不再是一个问题了,很多时候,这两种开发模式混合使用,前提是你对寄存器必须要相当的了解,然后调用一个库函数时心中就已经知道这个库函数的背后对那些寄存器进行了操作~ 呵呵,这是我第一次在百度问答回答问题,以前自己一直是信息的索取者,很少成为信息的传播者,今天,开始做出改变,希望多多支持~
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-08-22
路过,不知道

STM32的外部中断问题
问题1,EXTI0~EXTI15每个对应于一组(PA,PB,PC,PD..)1,在用外部中断的时候如用EXTI4(外部中断4)需要配置PA4还是PB4...这几组io口的第四个管脚作为输入,只能选择一个。问题2,void EXTI_Configuration(void) 中断初始化函数 EXTI_InitTypeDef EXTI_InitStructure; 定义EXTI_InitStructure为中断配...

stm32中空闲io口应用外部中断的问题
回答:你看一下.s启动文件里面的中断入口名和_it.c中断服务程序里面的中断入口名是否一致。STM32固件库的几个不同版本入口名有变化。

用STM32做矩阵键盘、自己理解的外部中断方式的几个问题。
EXTI是边沿触发的。当你按下键时,肯定会出现抖动,那抖动一次就是一个边沿,自然会一次次的触发中断了。我以前也试验过,很不好使。用systick扫描是一个办法,我用这个实现了线反转法扫描4X4的键盘矩阵。设置10ms中断一次,每次进中断首先检查有没有按键,如果没有就pass,如果有就先计个数再退出,...

stm32 哪些外部中断管脚能用,为什么有些端口不能进入外部中断?
中断管脚需要是正常的IO口,除去特殊或专门用途的管脚外,其他可以作为外部中断用。查看中断源你会发现,只有GPIOx的第0-4管脚有各自的中断名称,第5-9管脚共用一个中断名称,第10-15管脚共用一个中断名称。这在STM32的技术手册中会有详细说明,可以去看看。

在写stm32外部中断是出现:LED.axf: Error: L6218E: Undefined symbol NV...
NVIC_Init () 在main.c文件中 这个函数没有定义 这个函数是在库文件中定义的 你应该没有添加进来! 将包含这个函数的库文件 添加进工程就好了!

用stm32的几个管脚作外部中断,请问:能在进入外部中断时读取作外部中断管...
可以,和正常时刻读取IO引脚状态是一样的操作

STM32共用中断线的外部中断引脚的判断
同时配置了多个管脚(比如,PE1,PA1,PB1)的中断到同一中断线(比如EXTI_LINE1),只有最后的一个配置生效(PB1有 效,PE1,PA1进不了中断)

STM32的外部中断EXTI9_5_IRQChannel通道只能对应5-9其中一个通道吗...
EXTI的信号来源是受到AFIO->EXTICRx寄存器控制的,这个寄存器怎么设置,才能使对应端口上的电平变化产生中断。比如AFIO->EXTICR2=0x00000100这时只有PB6引脚的电平变化才能产生中断EXTI6,其他PA6、PC6等等的就不行。

请问我用stm32的外部中断时,使用下降沿触发,那么按键导致下降沿可以触发...
进中断后在中断里延时就可以避免抖动了;进中断后先关中断,处理完事返回时再打开;

STM32外部中断查询: 15-10线的外部中断共用一个中断函数,怎么在该函数...
使用 EXTI_GetITStatus()来查询哪根线产生了中断。比如EXTI_GetITStatus(EXTI_Line13)就是查询13线是否产生了中断的。

相似回答