打印
[STM32F4]

STM32定时器资源中断冲突(可能)问题

[复制链接]
581|13
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

1.背景:
使用STM32F407的定时器及配置为:
TIM1用于PWM输出,不设中断嵌套;
TIM4、TIM12分别用于两个传感器的PWM输入捕获,均有设置中断嵌套;
TIM6作计时以及其余函数调用的容器,设置中断嵌套。
USART1用于通信,设置中断嵌套

2.定时器Prescaler及Period配置
TIM6, Prescaler=8400-1,Period=100-1;
TIM4, Prescaler=840-1,Period=0xFFFF-1;
TIM12, Prescaler=840-1,Period=0xFFFF-1;

2.中断嵌套顺序为:
USART1——NVIC_PriorityGroup_1,NVIC_IRQChannelPreemptionPriority=0,NVIC_IRQChannelSubPriority=0
TIM6——NVIC_PriorityGroup_2,NVIC_IRQChannelPreemptionPriority=0,NVIC_IRQChannelSubPriority=1
TIM4——NVIC_PriorityGroup_2,NVIC_IRQChannelPreemptionPriority=1,NVIC_IRQChannelSubPriority=2
TIM12——NVIC_PriorityGroup_2,NVIC_IRQChannelPreemptionPriority=1,NVIC_IRQChannelSubPriority=3

描述一下我遇到的问题:
所有的模块单独分开的时候都可以正常工作,且TIM4和TIM12可以同时工作,但加入TIM6之后,则中断嵌套级别最低的TIM12不能正常工作。目前需要USAT1和TIM6继续保持其中断优先的级别顺序,即保持优先级别高且可打断其他中断的能力。请问有无比较好的思路可以解决上述问题。


使用特权

评论回复
沙发
香水城| | 2023-12-3 22:02 | 只看该作者
你自己拿纸笔比划比划,看看UART1/TIM6/TIM4三个中断跑起来后,还有多少机会给TIM12。

你可能要适当调整下代码逻辑以及各个中断程序的用时。

还有,你怎么搞了2个中断优先级分组?目的何在?

使用特权

评论回复
板凳
stormwind123| | 2023-12-4 15:33 | 只看该作者
你遇到的问题可能是由于中断优先级冲突引起的。

使用特权

评论回复
地板
flycamelaaa| | 2023-12-4 15:35 | 只看该作者
在中断处理函数中添加延迟,以等待其他中断处理完成。但这种方法可能会影响系统实时性,需要根据实际情况谨慎使用。

使用特权

评论回复
5
一只眠羊| | 2023-12-17 16:26 | 只看该作者
你做了2组中断,其实可以改成1组的

使用特权

评论回复
6
我吃小朋友| | 2023-12-17 19:00 | 只看该作者
一般修改一下优先级就好了

使用特权

评论回复
7
未说出口的像你| | 2023-12-17 21:00 | 只看该作者
NVIC_PriorityGroup_2,只用这个就行,你这个NVIC_PriorityGroup_1没必要的

使用特权

评论回复
8
在曼谷的春| | 2023-12-17 23:00 | 只看该作者
串口的优先级可以做成最高,然后依次按照业务流程设计呗

使用特权

评论回复
9
月亮一键变蓝| | 2023-12-18 01:00 | 只看该作者
得看你业务逻辑,不过现在的问题就是中断优先级乱套了

使用特权

评论回复
10
失物招領| | 2023-12-18 03:00 | 只看该作者
定时器4和12好像在一个组一个等级上啊,我觉得可以分开更好一些

使用特权

评论回复
11
她已醉| | 2023-12-18 05:00 | 只看该作者
你这优先级顺序有点乱,建议你还是好好梳理一下比较好

使用特权

评论回复
12
将爱藏于深海| | 2023-12-18 07:00 | 只看该作者
把定时器12里的业务,都放到定时器4里也行吧

使用特权

评论回复
13
春日负喧| | 2023-12-18 09:00 | 只看该作者
你仿真看看程序运行的顺序呗,看看咋回事儿

使用特权

评论回复
14
温室雏菊| | 2023-12-18 16:00 | 只看该作者
做一些延时,或者修改一下优先级试试

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

86

帖子

0

粉丝