본문 바로가기

[ST_MICRO]/STM8

STM8S - 타이머 테스트 (1초 만들기)

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;

}


반응형