2015-01-12 2 views
0

저는 PWM 듀티 사이클을 0에서 50 %까지 증가시키고 자하는 프로젝트에서 일하고 있습니다. 내 기간은 16000 카운트 또는 1ms (16MHz 기본 타이머 카운트)입니다. 어떤 이유로, 각 기간의 듀티 사이클을 업데이트하는 대신 훨씬 더 느리게 업데이트합니다. 내가 타이머 인터럽트 내에서 새로운 듀티 사이클을 계산하고 있기 때문에 그것이 나올지 궁금해? 여기에 내가 사용하고있는 작업은 다음과 같습니다 내가 바보 인 것처럼STM32F4 PWM 램프

void TIM4_IRQHandler() 
{ 
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) 
{ 
    TIM_ClearITPendingBit(TIM4, TIM_IT_Update); 

    if (loop <= 8000) { 
     TIM4 -> CCR1 = CCR_i; 
     uint16_t y = CCR_i; 
     CCR_i = y + 1; 
     int x = loop; 
     loop = x + 1; 
    } 
    if (loop == 8001) { 
     TIM4 -> CCR1 = 0; 
     uint16_t x = CCR_i; 
     CCR_i = x + 1; 
     int c = loop; 
     loop = c + 1; 
    } 

    if (loop > 8001) { 

     int t; 
     for(t = 0; t < 10; t++){ 
      // wait 
     } 

     GPIO_SetBits(GPIOG, GPIO_Pin_8); 
     //Stop2(); 
     TIM_ITConfig(TIM4, TIM_IT_Update, DISABLE); 
     NVIC_DisableIRQ(TIM4_IRQn); 
     } 
    } 
} 

답변

0

폭발, 보이는 - 그냥 펄스 폭에 진입로이 1ms의 기간 8 초 정도 소요 - 타이머가 내가 원하는 정확히하고있다 기간 당 62.5ns를 추가하는 500us.