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

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM