stm32f407之PWM(操作暫存器)
阿新 • • 發佈:2019-01-27
PWM
脈寬調製模式可以生成一個由TIMx_ARR暫存器的值確定頻率和TIMx_CCRx暫存器的值確定佔空比的訊號。
可以對每個通道獨立選擇PWM模式,( OCx輸出一個PWM訊號)在TIMx_CCMRx暫存器的OCxM位寫110(PWM模式1)或111(PWM模式2)。必須通過設定TIMx_CCMRx暫存器的OCxPE位,啟用相應的預裝載暫存器,最後還要設定TIMx_CR1暫存器的ARPE位,(在向上計數或中心對稱模式中)使能自動重灌載的預裝載暫存器。
僅當發生一個更新事件的時候,預裝載暫存器才能被傳送到影子暫存器,因此在計數器開始計數之前,必須通過設定TIMx_EGR暫存器中的UG位來初始化所有的暫存器。
OCx的極性可以通過軟體在TIMx_CCER暫存器中的CCxP位設定,它可以設定為高電平有效或低電平有效。TIMx_CCER暫存器中的CCxE位控制OCx輸出使能。詳見TIMx_CCERx暫存器的描述。
配置步驟:
1. 使能相關時鐘。
2. 配置相關的引腳模式、速度、以及複用功能。
3. 使能TIM時鐘
4. 設定分頻。
5. 設定週期。(ARR的值)週期=(PSC+1)* ARR / TIMx時鐘
6. 產生一次更新事件,更新影子暫存器的值。
7. 在CCMR中設定PWM模式。
8. 設定各通道佔空比。佔空比= CCRx / ARR。
9. 使能比較輸出。
10. 啟動預裝載。
11. 開啟定時器。
程式:
/************************************ 標題:輸出4路PWM 軟體平臺:IAR for ARM6.21 硬體平臺:stm32f4-discovery 主頻:168M author:小船 data:2012-02-08 *************************************/ #include <stm32f4xx.h> void main () { SCB->AIRCR = 0x05FA0000 | 0x400; //中斷優先順序分組 搶佔:響應=3:1 RCC->AHB1ENR |= (1<<2); //開啟GPIOC時鐘 GPIOC->MODER |= 0X000AA000;//pc6789第二功能 //推輓輸出 GPIOC->OSPEEDR |= 0x000ff000;//速度100m GPIOC->PUPDR |= 0x00055000;//上拉 GPIOC->AFR[0] |= 0x22000000;//pc6789第二功能AF2 GPIOC->AFR[1] |= 0x00000022; RCC->APB1ENR |= (1<<1); //開啟TIM3時鐘 TIM3->PSC = 83; //對時鐘84M進行84分頻,使得計數頻率為1M TIM3->ARR = 10000; //週期10ms TIM3->EGR |= 1; //產生一次更新事件 TIM3->CCMR1 |= 0x6060;//PWM模式1 TIM3->CCMR2 |= 0x6060;//PWM模式1 TIM3->CCR1 = 8000;//設定第一通道佔空比80% TIM3->CCR2 = 6000;//設定第二通道佔空比60% TIM3->CCR3 = 4000; //設定第三通道佔空比40% TIM3->CCR4 = 2000; //設定第四通道佔空比20% TIM3->CCER |= 0x1111;//使能比較輸出 TIM3->CCMR1 |= 0x0808;//啟動預裝載 TIM3->CCMR2 |= 0x0808; TIM3->CR1 |= 1; //開始計時 while(1) { }; }