基本配置:
TIM1挂载在APB2总线上,150MHz经过15分频,得到10MHz计数频率,由于disable了自动重装载,所以只需要看下一次计数值是多少即可。
void TIM1_Delay_us(uint16_t us) //使用阻塞方式进行延时,ARR值不能为0!
{//按照手册来看,定时最大能到6.5535ms
__HAL_TIM_SET_AUTORELOAD(&htim1, us*10 - 1);
__HAL_TIM_ENABLE(&htim1);
while(__HAL_TIM_GET_COUNTER(&htim1) != us*10-1);
__HAL_TIM_DISABLE(&htim1);
}
测试如下:
测试代码:
GPIOE->ODR |= 0x01<<3;
TIM1_Delay_us(Us,&htim1); //Us变量的值在外部中断中进行累加。
GPIOE->ODR &= ~(0x01<<3);
TIM1_Delay_us(Us,&htim1);
定时1us,实际1.3us
定时2us,实际2.28us
定时3us,实际3.22us
定时60us,实际61.14us(428us/7)。
定时70us,实际71.25us(570us/8)。
定时800us,实际800us。
定时最大时间:
定时6553.5us,测得时间为6.56ms,算上误差,差不多。