{
__HAL_TIM_SetCounter(&htim6,0);
__HAL_TIM_ENABLE(&htim6);
while(__HAL_TIM_GetCounter(&htim6) <= nus*16);//定时器基准时钟16MHZ
__HAL_TIM_DISABLE(&htim6);
}
楼主,定时器6的CNT寄存器是 16位的,而nus是32位的还乘了16了,这个值在一定条件下是会大于16位最大值的,即当nus > 65535/16 时,nus*16的值会大于16位最大值,上面那个whil条件一直成立,所以会死在那。
你可以在外面再加一个循环,内部用定时器来实现,内部每执行一次是5ms,这样就转换成了5MS倍数的循环,最后一次为ns级延时。 很早就搞定了,忘记回复了。
页:
1
[2]