stm32 外部中断疑问
1.STM32的中断分级好像不管怎么分组之后,总共只能分出16级。。。那只能写16个中断吗?2.STM32的外部中断的线是很多IO口公用的,比如EXIT0是PA0,PB0...
1.STM32 的中断分级好像不管怎么分组之后,总共只能分出16级。。。那只能写16个中断吗?
2.STM32 的外部中断的线是很多IO口公用的,比如EXIT0是PA0,PB0,PC0。。共用,那我想用这些口,都去做EXIT0的中断管脚,然后在中断处理中判断哪个进行的中断,这样可以吗?怎么配置呢?
3.如果我希望在一个中断处理的时候,另一个中断进来,它能进行处理吗? 展开
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的关键,过了一段时间之后,再去接触库函数开发模式,会觉得效率高多了,但库函数的实质还是操作寄存器~对它们都比较了解后,就觉得这不再是一个问题了,很多时候,这两种开发模式混合使用,前提是你对寄存器必须要相当的了解,然后调用一个库函数时心中就已经知道这个库函数的背后对那些寄存器进行了操作~ 呵呵,这是我第一次在百度问答回答问题,以前自己一直是信息的索取者,很少成为信息的传播者,今天,开始做出改变,希望多多支持~
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的关键,过了一段时间之后,再去接触库函数开发模式,会觉得效率高多了,但库函数的实质还是操作寄存器~对它们都比较了解后,就觉得这不再是一个问题了,很多时候,这两种开发模式混合使用,前提是你对寄存器必须要相当的了解,然后调用一个库函数时心中就已经知道这个库函数的背后对那些寄存器进行了操作~ 呵呵,这是我第一次在百度问答回答问题,以前自己一直是信息的索取者,很少成为信息的传播者,今天,开始做出改变,希望多多支持~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询