GD32F407 timer延遲函數(shù),非中斷
void dri_timer_delay_init(dri_timer_calc_type type)
{
timer_parameter_struct ptr_time;
rcu_periph_clock_enable(PERIPH_DELAY_TIMER);
rcu_timer_clock_prescaler_config(RCU_TIMER_PSC_MUL4);
timer_deinit(DELAY_TIMER);
/* Time base configuration */
ptr_time.clockdivision = TIMER_CKDIV_DIV1;
ptr_time.counterdirection = TIMER_COUNTER_DOWN;
ptr_time.period = 1;
if(type == DRI_TIMER_CALC_TYPE_S)
{
//預(yù)分頻 168MHz / 1680 = 100kHz(1ms),計(jì)數(shù)值設(shè)置為1000則為1S延時(shí)
ptr_time.period = 1000;
ptr_time.prescaler = 1680-1;
}
else if(type == DRI_TIMER_CALC_TYPE_MS)
{
ptr_time.prescaler = 1680-1; //100kHz ,定時(shí)器計(jì)數(shù)1次為ms
}
else if(type == DRI_TIMER_CALC_TYPE_US)
{
ptr_time.prescaler = 168-1; //1MHz ,計(jì)數(shù)1次為us
}
else
{
ptr_time.prescaler = 1680-1;
}
timer_init(DELAY_TIMER, &ptr_time);
/* TIM interrupt enable */
// __TIM_INTR_ENABLE(DELAY_TIMER, TIM_INTR_UPDATE);
/* TIM enable */
timer_enable(DELAY_TIMER);
}
/************************************************
函數(shù)名稱(chēng) : TIMDelay_us
功 能 : 定時(shí)器延時(shí) N us
參 數(shù) : Times --- N值
返 回 值 : 無(wú)
作 者 :
*************************************************/
void dri_timer_delay_us(uint32_t Times)
{
uint32_t counter = Times & 0xFFFFFFFF;
TIMER_CNT(TIMER3) = counter; //設(shè)置計(jì)數(shù)值
TIMER_CTL0(TIMER3) |= TIMER_CTL0_CEN;
while(TIMER_CNT(TIMER3) > 1);
TIMER_CTL0(TIMER3) &= (uint16_t)(~TIMER_CTL0_CEN);
}
純屬記錄學(xué)習(xí),如有問(wèn)題,歡迎指正!

浙公網(wǎng)安備 33010602011771號(hào)