先貼代碼,其實主頻 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這邊.
|