我有一個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 –