STM32-HAL库下使用通用定时器实现微秒级和毫秒级延时
1. 芯片:STM32F407IGT6
2. 定时器:TIM3
3. 时钟源:外部8M时钟源(HSE)
4. 时钟:HCLK-168M
5. Prescaler定时器分频83 (83+1)
6. ARR预装载 1 84M/(83+1)*1 = 1us
7. 向下计数
+ 如果使用溢出中断,由于进中断太快,上一次中断还未处理,下次中断机会到来,会造成误差
+ 所以这里使用轮询的方式,查询剩余的计数值是否大于0,完成设定的时间数
void delay_us(uint32_t us){
uint16_t counter=us&0xffff;
HAL_TIM_Base_Start(&htim3);
__HAL_TIM_SetCounter(&htim3,counter);
while(counter>=1)
{
counter=__HAL_TIM_GetCounter(&htim3);
}
HAL_TIM_Base_Stop(&htim3);
}
void delay_ms(uint32_t ms){
delay_us(1000*ms);
}