完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
个位大佬你们是如何测试STM32中断抢占的,我的测试步骤如下:第一步、我配置了两个定时器,定时器2优先级为3,定时器3优先级为4,
第二步、我各自测试都可以发生中断 第三步、在定时器3中加上while 死循环,因为定时器三优先级低理论上讲定时器3中断在死循环中时候,定时器2肯定可以产生中断,但是定时器2的中断就再也不发生了,程序就死在了定时器3中断中 我想知道为何优先级高的定时器2居然一次都抢不到中断了呢? 费解中,拜求大佬帮忙解答。 |
|
相关推荐
1个回答
|
|
在STM32中,中断优先级是一个重要的概念,它决定了在多个中断同时发生时,哪个中断会被优先处理。根据您的描述,您已经配置了两个定时器,定时器2的优先级为3,定时器3的优先级为4。理论上,定时器2的优先级更高,应该能够抢占定时器3的中断。但是,您遇到了一个问题,即定时器2的中断不再发生,程序死在了定时器3的中断中。
为了解决这个问题,我们可以按照以下步骤进行排查和测试: 1. 确认中断优先级配置:首先,确保您已经正确配置了定时器2和定时器3的优先级。在STM32中,优先级是通过NVIC(嵌套向量中断控制器)来设置的。您需要检查NVIC的配置代码,确保定时器2的优先级高于定时器3。 2. 检查中断使能:确保定时器2和定时器3的中断都已经使能。在STM32中,每个中断源都有一个使能位,需要将其置位才能使能中断。检查您的代码,确保已经使能了定时器2和定时器3的中断。 3. 检查中断服务函数:在您的代码中,检查定时器2和定时器3的中断服务函数(ISR)。确保在ISR中正确地清除了中断标志,以便允许新的中断请求。如果中断标志没有被清除,即使中断优先级设置正确,中断也不会再次发生。 4. 测试中断抢占:在定时器3的ISR中加入while死循环,模拟一个高优先级的中断长时间占用CPU的情况。在这种情况下,如果定时器2的优先级设置正确,它应该能够抢占定时器3的中断。您可以在定时器2的ISR中加入一个计数器,用于记录中断发生的次数。如果定时器2的中断能够成功抢占,计数器的值应该会增加。 5. 分析问题原因:如果在执行上述步骤后,定时器2的中断仍然无法抢占,那么可能存在以下原因: a. 中断优先级配置错误:请重新检查NVIC的配置代码,确保定时器2的优先级高于定时器3。 b. 中断使能位未置位:请检查您的代码,确保已经使能了定时器2和定时器3的中断。 c. 中断标志未清除:请检查定时器2和定时器3的ISR,确保在ISR中正确地清除了中断标志。 6. 优化代码:如果问题仍然存在,您可以尝试优化您的代码,例如减少定时器3 ISR中的while死循环时间,或者尝试使用其他方法来模拟高优先级中断长时间占用CPU的情况。 通过以上步骤,您应该能够找到导致定时器2无法抢占中断的原因,并采取相应的措施来解决问题。希望这些建议对您有所帮助! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1869浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
652浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
520浏览 3评论
539浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
508浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-25 05:15 , Processed in 0.875278 second(s), Total 80, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号