利用定时器,可以精准实现延迟函数
void delay_init()
{
TIM4_PSCR = 0x01; // 2Mhz/2 = 1Mhz
TIM4_ARR = 0xFF; // 255 will be reloaded
TIM4_CR1 &= 0x00; // CR1 = 0, all default value
TIM4_CR1 |= (1<<2); // USR = 1, (update only when overflow)
TIM4_EGR = 0x00; // No action
TIM4_CNTR = 0x00; // CNTR is 0 by default
TIM4_IER = 0x00; // Interrupt is disabled
}
void delay_us(unsigned char time)
{
TIM4_EGR |= 0x01;
TIM4_CNTR = 0;
TIM4_CR1 |= (1<<0); // This will start the timer
while(TIM4_CNTR < time); // Consume 1 us for excution
TIM4_CR1 &= ~(1<<0); // Disable timer
TIM4_CNTR = 0x00; // Reset counter
TIM4_SR &= ~(1<<0); // Clearing the flag
}
void delay_ms(unsigned int time)
{
time *= 10;
while(time--)
// ATTENTION: The Auto-Reload value is 255 that has been set by TIM4_init() function
// so 100 is okay to pass
delay_us(100);
}