15616384352 发表于 2017-5-31 19:20:50

void delay_us(uint32_t nus)
{
      __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级延时。

厦门浪子 发表于 2017-6-3 19:34:37

很早就搞定了,忘记回复了。
页: 1 [2]
查看完整版本: 培训会什么时候召开