2017-06-21 72 views
0

main()的优先级我使用3 PWM + USB(3个不同的TIM)产生3个80kHz的方波,当他们开始工作不久的说50KHz新发现,不执行主循环(我闪烁1秒)。 USB的优先级为0,而PWM有1(可更改)。这是因为目标波频率是通过USB给出的。NVIC_Priority和STM32

在PWM回调,因为海浪可以加速或减速,我打电话给其精心设计的在该值的下一个CCR/ARR应以有一个平稳的加速计功能。

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

我能做的是通过使用更改为true的PWM回调函数内,设置为false一旦主叫funcion一个简单的布尔变量来调用该函数上面主要循环。

恐怕,这种做法可能会导致一个不那么完美的70/100kHz的方波例如(也许63khz或于95kHz由于需要在main()计算时间)。

那么,有没有办法给主排序优先呢? 主要是基本检查5ms/10ms/50ms/1s是否已经通过例如。

+0

哪些是您使用STM32?你为什么用中断来做PWM?你为什么不让定时器模块为你工作?您可以使用DMA更改一些寄存器值。我用这种方法用Timer1创建了正弦波。我怀疑我一定会错过一些东西,但是在软件中创建10万方波似乎对我来说很疯狂。 :) – DiBosco

+0

我需要使用中断,因为我需要计算每个方波脉冲。 此外我需要中断,因为如果我有一个100khz的目标波应该做10-20-30-40-50-60-70-80-90-100Khz与线性可校准的“加速度”。这意味着我需要改变CCR和ARR dinarenically – Luigi

+0

我不知道你的意思是“计数”每个方波。你是否真的告诉我,你在每个定时器中断的软件中切换引脚?另外,您究竟多久更换一次频率?我想我仍然错过了一些东西。 – DiBosco

回答

0

那么,有没有办法给主排序优先呢?所述 主基本上检查是否为5ms/10毫秒/ 50毫秒/ 1S已通过为 例子。

没有,主要通过定义运行在最低优先级,处于闲置状态。然而,你可以在systick(或任何其他中断)中运行一些东西来给定优先级。但如果你真的没有时间,改变优先次序将无济于事。

在PWM回调,因为海浪可以加速或减速,我是 调用一个精心设计的在该值的下一个CCR/ARR 才能有一个平稳的加速应该算作一个功能。

我建议你使用DMA此相反。
在开始时,您需要提前计算一部分值。然后使用DMA(定时器有DMA请求)将新值写入定时器,增加源地址并让它以硬件运行。定时器可以选择将寄存器缓冲到只在溢出时更新以防止毛刺。 在半传输中断处,计算循环源缓冲区的下一部分。并且继续。

可以同步和许多定时器连接在一起。你只需要琢磨一下。