注意:在中断中尽量不要用定时器,如果用的话记得调高定时器的优先级。
f1系列定时器:
tim6和tim7是基本定时器,只能向上计数,只能定时,没有外部IO。
tim1和tim8是高级定时器,可以定时,可以输出比较,可以输入捕捉,还可以有三相电机互补输出信号,有8个外部IO。做电机控制会用到高级定时器。
tim2/3/4/5是通用定时器,可以定时,可以输出比较,可以输入捕捉,有4个外部IO。
使用tim3实现us级延时(总会多出大概10us)
开始代码前先按照我写的定时器延时公式配置一下。
//注意一次延时不要超过最大延时
void delay_us(uint32_t us)
{
//。tim3开始计数
HAL_TIM_Base_Start(&htim3);
// 设置tim3寄存器值为0
__HAL_TIM_SET_COUNTER(&htim3,0);
while(__HAL_TIM_GET_COUNTER(&htim3)<us)
{
}
HAL_TIM_Base_Stop(&htim3);
}
由于hal库的自身原因导致72Mhz下每次运行延时函数都会多10us的时间,所以现在要在原来的基础上减去10us。
修改后的代码(特别注意延时时间不能小于10us)
//注意一次延时不要超过最大延时
void delay_us(uint32_t us)
{
us-=10;
//。tim3开始计数
HAL_TIM_Base_Start(&htim3);
// 设置tim3寄存器值为0
__HAL_TIM_SET_COUNTER(&htim3,0);
while(__HAL_TIM_GET_COUNTER(&htim3)<us)
{
}
HAL_TIM_Base_Stop(&htim3);
}