天天看點

stm32f407之進階定時器 死區互補PWM(操作寄存器)

十四、進階定時器

死區互補PWM

         進階定時器的功能有很多,這裡隻介紹死區互補PWM輸出功能。其實死區互補PWM跟通用定時器的PWM配置差異不大,隻是需要設定多CCER寄存器中的幾個位以及刹車與死區寄存器BDTR。對寄存器的具體描述請參考資料手冊。

         配置步驟:

1.     使能相關時鐘。

2.     配置相關的引腳模式、速度、以及複用功能。

3.     使能TIM時鐘

4.     設定分頻。

5.     設定周期。(ARR的值)周期=(PSC+1)* ARR / TIMx時鐘

6.     産生一次更新事件,更新影子寄存器的值。

7.     在CCMR中設定PWM模式。

8.     設定各通道占空比。占空比= CCRx / ARR。

9.     使能比較輸出。

10.  啟動預裝載。

11.  死區時間設定,使能輸出。

12.  打開定時器。

程式:

/************************************
    标題:死區互補PWM
    軟體平台:IAR for ARM6.21
    硬體平台:stm32f4-discovery
    主頻:168M

    描述:三對死區互補PWM、一路普通PWM
          PE8 ----- TIM1_CH1N
          PE9 ----- TIM1_CH1
          PE10 ----- TIM1_CH2N
          PE11 ----- TIM1_CH2
          PE12 ----- TIM1_CH3N
          PE13 ----- TIM1_CH3
          PE14 ----- TIM1_CH4
    
    author:小船
    data:2012-02-09
*************************************/

#include <stm32f4xx.h> 

void main ()
{   

  SCB->AIRCR = 0x05FA0000 | 0x400;  //中斷優先級分組 搶占:響應=3:1
  
  RCC->AHB1ENR |= (1<<4); //打開GPIOE時鐘
  GPIOE->MODER |= 0X2AAA0000;//PE8、9、10、11、12、13、14第二功能
        //推挽輸出
  GPIOE->OSPEEDR |= 0x3fff0000;//速度100m
  GPIOE->PUPDR |= 0x15550000;//上拉  
  
  //PE8、9、10、11、12、13、14第二功能AF1
  GPIOE->AFR[1] |= 0x01111111;
  
  RCC->APB2ENR |= (1<<0); //打開TIM1時鐘
  TIM1->PSC = 167; //對時鐘168M進行168分頻,使得計數頻率為1M
  TIM1->ARR = 10000;  //周期10ms
  TIM1->EGR |= 1; //産生一次更新事件
  
  TIM1->CCMR1 |= 0x6060;//PWM模式1
  TIM1->CCMR2 |= 0x6060;//PWM模式1
  
  TIM1->CCR1 = 8000;//設定占空比
  TIM1->CCR2 = 6000;
  TIM1->CCR3 = 4000;
  TIM1->CCR4 = 2000;
  
  TIM1->CCER |= 0x1ddd;//使能比較輸出
  
  TIM1->CCMR1 |= 0x0808;//啟動預裝載
  TIM1->CCMR2 |= 0x0808;
  
  TIM1->BDTR|=1<<15;    // 刹車使能位置1,開啟所有輸出通道
  TIM1->BDTR|=0xCD;     // 死區時間設定
  TIM1->CR1 |= 1; //開始計時

  while(1)
  {
  };
}


           

繼續閱讀