我有一个STM32F4,我想PWM一个已经或运算带着面具GPIO端口..PWM DMA到整个GPIO
所以,也许我们要在200kHz至PWM 0b00100010
一段时间,但是接着,在10khz之后,我们现在想要PWM 0b00010001
...然后,在10kHz之后,我们希望在相同的GPIO上PWM一些其他掩模。
我的问题是,你如何做到这一点与DMA?我试图触发一个DMA传输,将所有位设置在上升沿,然后再进行另一次DMA传输,以在下降沿清除所有位。
我还没有发现,因为它看起来像我只得到一个机会,做一个上升沿东西的好办法做到这一点,(至少CubeMX和我使用C & STM32的经验有限)。
我的一个主要关注点是CPU时间,因为虽然我提到数百kHz的在上面的例子中,我想使这个框架非常坚固那么远,因为它是不会浪费的CPU资源...这就是为什么我喜欢DMA的想法,因为它是专用硬件,可以在这里无意识地提取单词,并且CPU可以做其他事情,比如PID的紧缩数字或其他东西。
编辑 为清楚:我有一组6个值的,我可以写一个GPIO。这些存储在一个数组中。 我想要做的是建立一个PWM定时器,在PWM的正宽度期间设置GPIO,然后我希望GPIO在低周期宽度期间设置为0b00000000(如果pwm)。因此,我需要看到什么时候上升沿,快速写入gpio,然后看下降沿是什么时候,写0到gpio。
什么是10kHz以后? Hz不是时间单位。 DMA不能做任何逻辑操作。它只是将数据从位置A传送到B. –
好的... 100us后,我想将相同的200khz pwm应用于GPIO上的不同引脚。因此,我们将包含掩码的变量传送到GPIOx-> BSRR或在PWM的上升沿用DMA,然后在下降沿将GPIO设置回零... 100us层,不同的定时器溢出或比较什么的,然后唯一改变的就是现在我们在上升沿加载一个不同的值的DMA。 – testname123
我已经给你答案了。我的例子是1位。它也可以是16。否则使用定时器生成的PWM –