OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2350|回复: 1

中断嵌套,高抢断优先级不能打断低优先级问题解决办法

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
7
金钱
7
注册时间
2019-8-13
在线时间
2 小时
发表于 2019-8-13 15:33:16 | 显示全部楼层 |阅读模式
        一直都在论坛索取,今天刚好一个小的调试BUG在论坛没有找到解决方案,解决后准备发上来分享一下。
        最近调试CAN总线,发现CAN中断不能打断定时器中断,即使配置了CAN中断抢断优先级为0,定时器抢断优先级为1,也不能实现中断嵌套。所以准备用两个定时器中断重复这个实验过程。

        配置定时器中断优先级如下:
        NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn;                            //定时器4中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;           //抢占优先级1
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;                      //响应优先级1
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;                           //定时器3中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x02;          //抢占优先级2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02;                     //响应优先级
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        定时器3 2ms中断,定时器4 10ms中断,进入中断IO引脚拉高,退出中断IO引脚拉低,问题表现为,定时器4无法抢断定时器2进行中断。示波器显示如下:
         4810E7777A14EE2CB55BAA3C7DB94CEF.png
       问题解决:设置系统中断优先级分组需要在定时器初始化前,否则初始化定时器时,并没有分组信息。
       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
       TIM3_Init(999,839);   

       TIM4_Init(999,167);
       程序正常运行后示波器照片如下:
       2573F2348249E9710BAA211EB4AB1C9F.png
      
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2017-5-26
在线时间
4 小时
发表于 2020-3-19 19:32:24 | 显示全部楼层
哥们,我太佩服你了。我遇到这个问题,好几天都啥都没干。一直在找原因,甚至把一部分硬件有换掉了,最后觉得肯定是软件的原因。一直在网上找,也有同样问题的人,也没有答案。原因大家都没有想到,只有你找到症结。大部分回答的人觉得问问题的人特傻,但是也不能解决,而且手册上也没有特殊说明。希望你这个帖子让更多人看见。也是因为你抓住问题不放,才能找到真正的答案。牛逼。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-23 00:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表