STM32定时器获取系统时间

volatile uint32_t glo_50ms=0;

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
	if(htim->Instance == TIM7)
	{
		glo_50ms++;
	}
}

uint64_t micros(void)
{
	uint16_t cnt;
	cnt=TIM7->CNT;
	return glo_50ms*50000+cnt;
}

uint32_t millis(void)
{
	uint16_t cnt;
	cnt = TIM7->CNT;
	return glo_50ms*50 + cnt/1000;
}

uint64_t pre_time_1ms;
uint32_t pre_time_10ms;

void Main_loop_1MS_First(void);
void Main_loop_10MS_First(void);
void Main_loop_10MS_Second(void);

while(1)
{
      if(micros() - pre_time_1ms > 1000)//1 ms loop
      {
            pre_time_1ms = micros();
            Main_loop_1MS_First();
      }

      if(millis() - pre_time_10ms > 10)//10 ms loop
      {
            pre_time_1ms = micros();
            Main_loop_10MS_First();
            Main_loop_10MS_Second();
      }
}
bool Wait_processing(uint16_t TMS)
{
	if(TIM5->CNT < TMS)
	{
		return true;
	}else
	{
		TIM5->CNT = 0;
		return false;
	}
}

while(1)
{
      while(Wait_processing(1000));

}

posted @ 2020-06-11 15:15  超强磁铁  阅读(4777)  评论(1编辑  收藏  举报