標題: stmf103的輸出互補PWM波 [打印本頁]

作者: wangpeiyuan    時間: 2018-7-21 20:20
標題: stmf103的輸出互補PWM波
//TIM1_CH1 PWM輸出初始化
//arr:自動重裝值
//psc:時鐘預分頻數(shù)
void TIM1_PWM_Init(u16 arr,u16 psc)
{                           
    RCC->APB2ENR|=1<<11;   //TIM1時鐘使能   
    RCC->APB2ENR|=1<<2;     //使能PORTA時鐘         
    RCC->APB2ENR|=1<<3;     //使能PORTB時鐘     
    RCC->APB2ENR|=1<<0;     //開啟復用時鐘   
     
    GPIOA->CRH&=0XFFFF0000;   //PA8,9,10,11清除之前的設置
    GPIOA->CRH|=0X0000BBBB;   //PA8,9,10,11復用功能輸出
     
    GPIOB->CRH&=0X000FFFFF;  //PB13,14,15清除之前的設置
    GPIOB->CRH|=0XBBB00000;  //PB13,14,15復用功能輸出
     
    GPIOB->ODR|=1<<13;       //PB13 輸出上拉,低電平有效
    GPIOB->ODR|=1<<14;       //PB14
    GPIOB->ODR|=1<<15;       //PB15
    GPIOA->ODR|=1<<8;        //PA8
    GPIOA->ODR|=1<<9;        //PA9
    GPIOA->ODR|=1<<10;       //PA10
     
    TIM1->ARR=arr;           //設定計數(shù)器自動重裝值     ①1
    TIM1->PSC=psc;           //預分頻器設置             ②2
     
    TIM1->CCER|=1<<0;      //TIM1CH1 輸出使能,高電平有效      ③3
    TIM1->CCER|=1<<4;      //TIM1CH2 輸出使能
    TIM1->CCER|=1<<8;      //TIM1CH3 輸出使能
    TIM1->CCER|=1<<12;      //TIM1CH4 輸出使能
    TIM1->CCER|=1<<2;      //TIM1CH1N 互補輸出使能
    TIM1->CCER|=1<<6;      //TIM1CH2N 互補輸出使能
    TIM1->CCER|=1<<10;      //TIM1CH3N 互補輸出使能
     
    TIM1->CCMR1|=7<<4;     //CH1 PWM2模式           ④4
    TIM1->CCMR1|=1<<3;     //CH1預裝載使能   

    TIM1->CCMR1|=7<<12;    //CH2 PWM2模式         
    TIM1->CCMR1|=1<<11;    //CH2預裝載使能   

    TIM1->CCMR2|=7<<4;     //CH3 PWM2模式         
    TIM1->CCMR2|=1<<3;     //CH3預裝載使能  
  
    TIM1->CCMR2|=7<<12;    //CH4 PWM2模式         
    TIM1->CCMR2|=1<<11;    //CH4預裝載使能   
     
        TIM1->BDTR|=0x14;       //死區(qū)時間設置          ⑤5
    TIM1->BDTR|=1<<15;     //MOE 主輸出使能        ⑥6
    TIM1->CR1 |= 0x80;       //ARPE使能,開始所有輸出通道,默認向上計數(shù)   ⑦7
    TIM1->CR1 |= 0x01;       //使能計數(shù)器                                          
}

int main(void)
{           
    Stm32_Clock_Init(9);       //系統(tǒng)時鐘設置
    delay_init(72);             //延時初始化
    TIM1_PWM_Init(499,7199);    // 72M/7200=10khz, 1/10khz * 500=50ms   ⑧8
    while(1)
    {                    
        TIM1->CCR1=250;  //占空比:50%  低電平時長25ms   ⑨9
        TIM1->CCR2=125;  //占空比:75%  低電平時長12.5ms
        TIM1->CCR3=50;     //占空比:90% 低電平時長5ms
        TIM1->CCR4=25;     //占空比:95% 低電平時長2.5ms  
    }
}







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1