PWM 怎麼控制上升/下降位置

2019-07-20 23:31发布

void TIM3_PWM_Init(void)
{
    GPIO_Set(GPIOB,PIN5,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);
    GPIO_AF_Set(GPIOB,5,2); //PB5 AF2 TIM3_CH2   
           
    TIM3->ARR=10;
    TIM3->CCR2=1;  
   
    TIM3->CR2 |= 5<<4;    //TRGO OC2REF
   
    TIM3->SMCR |= 1<<7; //slave mode
    TIM3->SMCR |= 1<<4; //TIM2 trigger
    TIM3->SMCR |= 7<<0; //TIM2 TRGO Rising edge count+   
   
    TIM3->CCMR1|= 3<<12; //CNT==CCR2, OC2 output evert   
   
    TIM3->CCER |= 1<<4;  //enable OC2
    TIM3->CCER |= 0<<5;  //OC2 polarity    high Level effective
            
    TIM3->DIER |= 1<<2;  //enable compare2 interrupt
   
    MY_NVIC_Init(1,3,TIM3_IRQn ,2);   
    TIM3->CR1 |= 1<<0;  
}


void TIM3_IRQHandler(void)
{   
    if(TIM3->CCR2==1)
    {
        TIM3->CCR2=8;   
    }
    else
    {
        TIM3->CCR2=1;
    }
   
    TIM3->SR &= ~(1<<2);  //clear Compare 2 interrupt flag
}

CLK由TIM2產生的
原本想產生第一個CLK上升 第8個CLK下降的PWM
結果連週期都錯的....應該是10個CLK 結果變20個  duty也錯的

是不是TIMx_CCMR1 OC1M:输出比较 1 模式 (Output compare 1 mode) 011:翻转––TIMx_CNT=TIMx_CCR1 时,OC1REF 发生翻转。
不能這樣玩阿...想說在中斷修改CCR讓它在別的地方翻轉就好....

有沒有大俠知道為啥~~

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。