STM32完全学习——使用定时器1精确延时
一、定时器的相关配置
首先一定要是递减定时器,递增的不太行,控制的不够准确,其次在大于10微秒的延时是非常准确的,小于的话,就没有那没准,但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟频率高的定时器,是比较好用的。
二、延时函数的实现
这里使用阻塞的方式实现,定时范围就是3120个微秒。
void delay_us(uint32_t us)
{
HAL_TIM_Base_Start(&htim1);
__HAL_TIM_SET_COUNTER(&htim1, us*21); //动态更改计数器里面的值
while (__HAL_TIM_GET_COUNTER(&htim1) != 0) //判断计数器里面的值是否计时结束
{ //因为是递减计数器,因此以0作为判断
}
HAL_TIM_Base_Stop(&htim1); //计时结束就关掉定时器
}