先贴代码,其实主频 48 M的主频这个函数延时还不错.
void delay_us (uint16_t us){ __HAL_TIM_SET_COUNTER(&htim17,0); // set the counter value a 0 HAL_TIM_Base_Start(&htim17); while (__HAL_TIM_GET_COUNTER(&htim17) < us); // wait for the counter to reach the us input in the parameter HAL_TIM_Base_Stop(&htim17);}
函数填进去2 延时2us 所得到的结果也就是4.2 usE 的样子 . 如果填写 20 进去 就是22us 的延时 分频填写个48-1 实际上就是48 分频 得到 us 一次的时间周期. 不过有一个问题,就是 我听说如果不引发 UEV 更新事件的话 ,设置的CNT 寄存器是不会立刻写入影子寄存器的.但是似乎这里又是立刻写入了. 有点点奇怪. 我的问题是 hal 库里面有没有更新UEV的函数,如何用?. 然后没有开启重载寄存器的话,这样为何没有看到计数器到了预设值再更新CNT寄存器的现象呢? 略有疑问. 之所以有这个疑问,是因为之前用STm8003 这个U,这个如果你不更的话时间就会有很大问题. 习惯带到了stm32这边.
|