×
嵌入式 > 技术百科 > 详情

STM8L151系列 使用定时器计时,全局滴答器jiffes

发布时间:2020-12-18 发布时间:
|

IAR软件,使用官方halt库


u32 g_counter = 0;      // 全局, jiffes 滴答时钟,时间计时器;

INTERRUPT_HANDLER(TIM3_UPD_OVF_TRG_BRK_USART3_TX_IRQHandler,21)// 计数器; 50ms 中断一次

{

//    disableInterrupts();    g_counter ++;

   TIM3_ClearITPendingBit(TIM3_IT_Update);

//    enableInterrupts();

}

 


#define  time_after(unknown,known)        ((long)(known) - (long)(unknown) < 0)

#define  time_before(unkonwn,known)       ((long)(unknown) - (long)(known) < 0)

#define  time_after_eq(unknown,known)     ((long)(unknown) - (long)(known) >= 0) //- - -

#define  time_before_eq(unknown,known)    ((long)(known) -(long)(unknown) >= 0)


extern u8 time3_has_start;

void SYS16M_time3_start(void)  

{

    //时钟配置

    CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, ENABLE);


    //64分频,向上计数,每50ms定时中断一次

    TIM3_DeInit();

    TIM3_TimeBaseInit(TIM3_Prescaler_128, TIM3_CounterMode_Up, 6250); // 16M / 128 = 1/8M; (1/8M) / (1/50ms) = 6250

    TIM3_ARRPreloadConfig(ENABLE);

    TIM3_ITConfig(TIM3_IT_Update, ENABLE);

    TIM3_Cmd(ENABLE);


    time3_has_start = 1;

}


 


void SYS16M_time3_stop(void)  

{

    TIM3_Cmd(DISABLE);

    CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);


    time3_has_start = 0;


}


u32 red_led_flash_time = 0;


void xxx_function(void)

{

    red_led_flash_time = 0;


    if(blue_led_flash_time == 0)

        blue_led_flash_time = g_counter;


    if(time_after(g_counter, blue_led_flash_time + ONE_SECOND))

        blue_led_on;

    else if(time_after(g_counter, blue_led_flash_time + TWO_SECOND))

        blue_led_off;

}


 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
实时控制.安全.如何加速实现未来工厂落地?