直接操作寄存器,两个函数6行代码实现精确的延时功能,源码如下:
初始化定时器,前提是RCC时钟树配好。
void TIM3_Config( void )
{
RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
TIM3->PSC = 36000 - 1; //72M/36000 = 2000Hz(500uS)
TIM3->ARR = 0xFFFF; //maximum
TIM3->CR1 |= TIM_CR1_CEN; //start the timer
}
2.延时函数
void Delay_ms(uint32_t UTime)
{
TIM3->CNT = 0;
while (TIM3->CNT <= (UTime << 1));
}
3.使用它
int main(void)
{
TIM3_Config();
while(1)
{
LED_BLU_INV;
Delay_ms(200);
}
}
这个延时也是死等,只能被中断打断,合不合适看应用场合吧!