STM8S - 타이머 테스트 (1초 만들기)
마이컴 다루면서 가장 기본으로 필요한 타이머 인터럽트인데, STM8S에서 타이머 인터럽트를 어떻게 제어 하는지 테스트 해 보았다.
STM8S 타이머 구조
STM8S는 3개의 타이머가 있다. TIM4 는 8bit 베이직타이머로 일반 시간 계산하는데 사용하면 편리하다.
Auto-reload 기능이 있어 한번만 설정하면 계속해서 자동으로 타이머 설정이 가능하다. 동급의 AVR에서는 이 기능이 없어서 인터럽트가 걸릴때 마다 매번 갱신해 주었어야 했었다.
메인클럭이 16Mhz 이므로 프리스케일로 1/128 하면 125khz가 되고 이는 8us 마다 한번씩 카운트 된다.
1초를 만드려면 1000ms/8ms -> 125번 만다 한번씩 인터럽트 걸리도록 하면 된다.
ST제공 예제를 이용하면 타이머를 쉽게 설정 가능하다.
void Timer4Init(void)
{
//Timer4 8bit Basic Timer Init
// 16MHz/128 = 125kHz -> 8us
TIM4_DeInit();
TIM4_TimeBaseInit(TIM4_PRESCALER_128, 125);
TIM4_ClearFlag(TIM4_FLAG_UPDATE);
TIM4_ITConfig(TIM4_IT_UPDATE, ENABLE);
TIM4_Cmd(ENABLE);
}
Timer4 인터럽트 핸들러
1ms마다 한번씩 증가 하도록 한다.
INTERRUPT_HANDLER(TIM4_UPD_OVF_IRQHandler, 23)
{
//Led1Toggle();
gTimeTick1++;
TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
}
STM8S Timer 테스트 예제코드
int main( void )
{
SystemInit();
DebugInit(BAUD_115200);
DebugPrint("STM8S Timer Test\r\n");
Led1Init();
Led1Off();
Timer4Init();
enable();
while(1)
{
if(gTimeTick1>1000-1)
{
gTimeTick1 = 0;
Led1Toggle();
}
}
return 0;
}