// 延时函数,参数ms表示毫秒数
void Delay_ms(uint32_t ms) {
// 计算定时器需要计数的值(考虑预分频器)
__HAL_TIM_SET_COUNTER(&htim2, 0); // 重置计数器
uint32_t ticks = (HAL_RCC_GetPCLK1Freq() / 1000) * ms / (htim2.Init.Prescaler + 1);
// 启动定时器
HAL_TIM_Base_Start_IT(&htim2); // 使用中断方式(可选,也可以使用轮询)
// 如果使用轮询方式,则等待计数器达到设定的值
while (__HAL_TIM_GET_COUNTER(&htim2) < ticks) {
// 可以在这里添加其他代码,但注意不要阻塞太久
}
// 停止定时器
HAL_TIM_Base_Stop_IT(&htim2); // 如果之前使用了中断方式
} |