Timer Output Compare로 LED 출력
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 */