본문 바로가기

공부/STM32F1

13.[stm32f103][hal] 타이머 (4) _ Timer PWM

728x90
반응형

1. stm32cube 설정

 

 

시간 계산

 

T = Counter Period / (APB2 timer clocks / Prescaler)

 

%Counter Period 는 최소 100이상이여야한다.

%값은 16비트제한으로 최대 65536 입니다.

%정확한 카운터를 위해서는 -1을 해야한다.

 

duty비(%) = 100/(Prescaler / Pulse)  

 

시간 계산은 

T =  8000000/8 / 1000 = 1ms

듀티비는 100 이면 10% 입니다.

 

 

2. 소스

int main(void)
{
 
  HAL_Init();
 
  SystemClock_Config();
 
  MX_GPIO_Init();
  MX_TIM8_Init();
 
  HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
 
  while (1)
  {         
      
  }
 
}
 

 

main.c 에 HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1); 이거만 추가하시면 됩니다.

 

3. 응용 코드

int main(void)
{
  uint8_t test=0;
 
  HAL_Init();
 
  SystemClock_Config();
 
 
  MX_GPIO_Init();
  MX_TIM8_Init();
 
  
  HAL_TIM_PWM_Start(&htim8, TIM_CHANNEL_1);
 
 
  while (1)
  {         
      
      test++;
      TIM8->CCR1 = test;
      HAL_Delay(100);
  }
 
}

이렇게 하면 100 ms 마다 duty비가 1(0.1%)씩 증가합니다. 

하지만 uint8_t 라서 256 이되면 0 이되니깐 참고하세요~~

TIM8->CCR1=(val);

val에 따라 듀티비를 바꿀수 있는 코드였습니다.

 

참고로 펄스 값을 바꾸기 위해선

TIM8->ARR = 1000;

 

이렇게 값을 바꾸면 htim8.Init.Period = 1000; <--요 값이 바꿔주니 참고하세요~~ 

 

 

728x90
반응형