功能代码块:延迟函数

利用定时器,可以精准实现延迟函数

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); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值