#include "delay.h" #include static TIM_HandleTypeDef *m_dhtim; void chip_delay_init(TIM_HandleTypeDef *htim) { m_dhtim = htim; } void _chip_delay_us(uint32_t n) { volatile uint32_t counter = 0; __HAL_TIM_SET_COUNTER(m_dhtim, 0); HAL_TIM_Base_Start(m_dhtim); while (counter < n) { counter = __HAL_TIM_GET_COUNTER(m_dhtim); } HAL_TIM_Base_Stop(m_dhtim); } void chip_delay_us(uint32_t n) { uint32_t us = n % 1000; uint32_t ms = n / 1000; if (us > 0) { _chip_delay_us(us); } for (uint32_t i = 0; i < ms; i++) { _chip_delay_us(1000); } } void chip_delay_ms(uint32_t n) { uint32_t i; for (i = 0; i < n; i++) { chip_delay_us(1000); } } void ifly_delay_ms(uint32_t n) { chip_delay_ms(n); } uint32_t chip_get_ticket() { uint32_t ticket = HAL_GetTick(); return ticket; } uint32_t haspassedms(uint32_t ticket) { uint32_t nowticket = HAL_GetTick(); if (nowticket >= ticket) { return nowticket - ticket; } return UINT32_MAX - ticket + nowticket; } uint32_t haspassedms2(uint32_t lastticket, uint32_t nowticket) { if (nowticket >= lastticket) { return nowticket - lastticket; } return UINT32_MAX - lastticket + nowticket; }