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