50031185 发表于 2018-8-16 09:08:46

实时的定时器中断函数被系统滴答时钟中断影响了怎么办

本帖最后由 50031185 于 2018-8-16 11:03 编辑

最近在用STM32F2 系列
使用CubeMX 配置了FreeRTOS+HAL库,
使用定时器6输出一个调制的信号方波, 两个IO口实现,不是一个IO口单纯输出的方波, 可是发现总是在第2个脉冲时,波形异常,定时器提前进入了中断,测了很久,后来又试着把系统的时钟频率由1000Hz改到250 , 发现 被干扰的信号时序后移了一截,
基本可以确定是被系统时钟干扰了吧,
有什么办法解决吗?

测试时,试了2种方式,
1中是中断函数直接在下面函数中执行
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
   ***
}
第二种方式是在下面函数中 发出信号量给专门的任务来执行中断函数


两种方式都受到了干扰


此外 在中断函数 HAL_TIM_PeriodElapsedCallback 中直接 使用
taskDISABLE_INTERRUPTS();



taskENABLE_INTERRUPTS();

也不行,会造成卡死,将这两句放在中断函数的外部任务中也没起到作用



这是 Cube中的中断配置

す疯Ⅱ恒す 发表于 2018-8-16 09:45:38

TIM6只是输出方波的话,不需要进中断啊,设定好PWM输出即可。
如果只需要计时功能的话,只保留一个定时器计时就好了,比如就用滴答定时器,定时发信号,简单一点。

50031185 发表于 2018-8-16 09:47:55

す疯Ⅱ恒す 发表于 2018-8-16 09:45
TIM6只是输出方波的话,不需要进中断啊,设定好PWM输出即可。
如果只需要计时功能的话,只保留一个定时器计 ...

是调制波形, 实际上要两个IO口输出信号的

wenyangzeng 发表于 2018-8-16 09:51:20

PWM输出完全不用使用定时器中断。ST官方有很多例程可以参考:

す疯Ⅱ恒す 发表于 2018-8-16 10:15:01

50031185 发表于 2018-8-16 09:47
是调制波形, 实际上要两个IO口输出信号的

两个IO的波形是否相关?不相关的话直接两个定时器输出,相关的话可以用一个定时器的两个通道,如果需要调制的话还可以用定时器级连的方式做。官方资料很多的。

50031185 发表于 2018-8-16 11:03:49

す疯Ⅱ恒す 发表于 2018-8-16 10:15
两个IO的波形是否相关?不相关的话直接两个定时器输出,相关的话可以用一个定时器的两个通道,如果需要调 ...

两个IO口输出的是相关的输出信号
页: [1]
查看完整版本: 实时的定时器中断函数被系统滴答时钟中断影响了怎么办