ARM

Timer Output Compare로 LED 출력

GunwooYun 2022. 4. 24. 12:50

Timer output compare 를 이용한 led 토글

board : STM32F103RB + I/O board
clock : 64MHz
Prescaler : 6400-1
ARR : 10000-1
pulse(ch1) : 1000-1

PC0:3 OUTPUT LED
Timer2: Internal Clock
Channel1 : output compare no output (timing base)

 

확대해야 잘 보임

 

채널1은 no output이므로 출력은 따로 없고, frozen모드로 단순한 interrupt 발생이다.


cnt == ccr 일때, callback 함수 호출, cnt == arr 일때 다시 callback 함수 호출
분주 후 64*10^4 Hz, ARR은 1*10^4, pulse는 1*10^3 이므로 0.1초 callback, 0.9초 callback 호출한다.

 

아래와 같이 callback 함수를 재정의하고 메인함수 안에서 타이머_인터럽트 시작함수, OC_인터럽트 시작함수를 실행해줘야 한다.

 

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim);
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim);

 

main(){
HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_OC_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)

}

// Timer base interrupt mode start
if(HAL_TIM_Base_Start_IT(&htim2) != HAL_OK){
	Error_Handler();
    }
  // OC interrupt mode start
  if(HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_1) != HAL_OK){
	  Error_Handler();
  }
  
/************************************************************/
  
/* USER CODE BEGIN 4 */
// Timer callback function, led light on
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	HAL_GPIO_WritePin(GPIOC, 0x000F, GPIO_PIN_SET);
}

// oc callback function, led light off
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim){
	HAL_GPIO_WritePin(GPIOC, 0x000F, GPIO_PIN_RESET);
}
/* USER CODE END 4 */