stm32上的NVIC_Priority和main()优先级

问题描述 投票:0回答:1

我正在使用3个PWM + USB(3个不同的TIM)来产生3个80khz方波,当它们开始接近50khz时,我注意到主循环没有被执行(我的闪烁导致1秒)。 USB的优先级为0,而PWM的优先级为1(可以更改)。这是因为目标波频率是通过USB给出的。

在PWM回调中,由于波可以加速或减速,我正在调用一个函数,该函数详细说明下一个CCR / ARR应该计数哪个值以便获得平滑加速。

我的理解是所需的计算能力开始增长,中断很多,填补了可用的插槽。

我能做的是通过使用一个简单的布尔变量在主循环中调用上面的函数,该变量在PWM回调函数内变为true,并在主函数调用函数时调用false。

我担心这种方法可能导致不太完美的70 / 100khz方波(由于需要main()计算时间,可能是63khz或95khz)。

那么有没有办法给主要一个优先权?主要是基本检查是否已经通过了5ms / 10ms / 50ms / 1s。

callback main stm32
1个回答
0
投票

那么有没有办法给主要一个优先权?主要是基本检查是否已经通过了5ms / 10ms / 50ms / 1s。

不,主要按定义运行在最低优先级,空闲。但是,你可以在systick(或任何其他中断)中运行东西,为常规任务提供更高的优先级。但如果你真的没时间,改变优先事项将无济于事。

在PWM回调中,由于波可以加速或减速,我正在调用一个函数,该函数详细说明下一个CCR / ARR应该计数哪个值以便获得平滑加速。

我建议您使用DMA代替。 在开始时,您事先计算一部分值。然后使用DMA(定时器有DMA请求)将新值写入定时器,递增源地址,并让它在硬件中运行。定时器可以选择缓冲寄存器,仅在溢出时更新以防止毛刺。在半传输中断时,您将计算循环源缓冲区的下一部分。并且继续。

您可以将多个计时器同步并连接在一起。你只需要有点困惑。

© www.soinside.com 2019 - 2024. All rights reserved.