是从0开始计数 计数到counter值为止
所以在while里面要判断计数值不为us
没用到中断 所以不用开启定时器中断
void TIM_Delay_us(uint16_t us,TIM_HandleTypeDef* htim)
{
TIM_Base_InitTypeDef TIM_Str={0};
TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
TIM_Str.Prescaler=50-1;
TIM_Str.Period=us;
TIM_Str.CounterMode=TIM_COUNTERMODE_UP;
TIM_Base_SetConfig(htim->Instance,&TIM_Str);
HAL_TIM_Base_Start(htim);
while(__HAL_TIM_GET_COUNTER(htim)!=us);
HAL_TIM_Base_Stop(htim);
}
void TIM_Delay_ms(uint16_t ms,TIM_HandleTypeDef* htim)
{
TIM_Base_InitTypeDef TIM_Str={0};
TIM_Str.AutoReloadPreload=TIM_AUTORELOAD_PRELOAD_DISABLE;
TIM_Str.Prescaler=50000-1;
TIM_Str.Period=ms;
TIM_Str.CounterMode=TIM_COUNTERMODE_UP;
TIM_Base_SetConfig(htim->Instance,&TIM_Str);
HAL_TIM_Base_Start(htim);
while(__HAL_TIM_GET_COUNTER(htim)!=ms);
HAL_TIM_Base_Stop(htim);
}
|