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