定时器实现 us 延时
首先需要对芯片的系统时钟进行配置,芯片最大48MHz。
实现方式一
使用定时器 TIM6来实现us延时,定时器TIM6总线上48MHz,计数单位为 48MHz/48 = 1us,所以分频系数 48-1,向上计数方式,周期 65535,由于没有使用到中断,不需要开启中断。
至此,配置工作就完成了,生成工程就可以了。
代码实现
/*
普通定时器实现us延时
*/
void Delay_nus(uint32_t nus)
{
uint16_t differ = 0xffff-nus-5;
//设置定时器2的技术初始值
__HAL_TIM_SetCounter(&htim6,differ);
//开启定时器
HAL_TIM_Base_Start(&htim6);
while( differ<0xffff-5)
{
differ = __HAL_TIM_GetCounter(&htim6);
}
//关闭定时器
HAL_TIM_Base_Stop(&htim6);
}
实现方式二
使用定时器 TIM6来实现us延时,定时器TIM6总线上48MHz,计数单位为 48MHz/8 = 8MHz,所以分频系数 6-1,向上计数方式,周期 65535,由于没有使用到中断,不需要开启中断。
代码实现
void bsp_DelayUS(uint16_t nus) //量程0-8191us
{
__HAL_TIM_SetCounter(&htim6, 0);//htim6
__HAL_TIM_ENABLE(&htim6);
while(__HAL_TIM_GetCounter(&htim6) < (8 * nus));//计数频率8MHz,8次即为1us
/* Disable the Peripheral */
__HAL_TIM_DISABLE(&htim6);
}
ms延时实现
/*
普通定时器实现ms延时,可直接使用HAL库函数HAL_delay()
*/
void Delay_ms(uint16_t nms)
{
uint32_t i;
for (i = 0;i < nms; i++)
Delay_nus(1000);
}