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

IAR软件,使用官方hal库

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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值