先貼代碼,其實(shí)主頻 48 M的主頻這個(gè)函數(shù)延時(shí)還不錯(cuò).
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);}
函數(shù)填進(jìn)去2 延時(shí)2us 所得到的結(jié)果也就是4.2 usE 的樣子 . 如果填寫 20 進(jìn)去 就是22us 的延時(shí) 分頻填寫個(gè)48-1 實(shí)際上就是48 分頻 得到 us 一次的時(shí)間周期. 不過有一個(gè)問題,就是 我聽說如果不引發(fā) UEV 更新事件的話 ,設(shè)置的CNT 寄存器是不會(huì)立刻寫入影子寄存器的.但是似乎這里又是立刻寫入了. 有點(diǎn)點(diǎn)奇怪. 我的問題是 hal 庫里面有沒有更新UEV的函數(shù),如何用?. 然后沒有開啟重載寄存器的話,這樣為何沒有看到計(jì)數(shù)器到了預(yù)設(shè)值再更新CNT寄存器的現(xiàn)象呢? 略有疑問. 之所以有這個(gè)疑問,是因?yàn)橹坝肧Tm8003 這個(gè)U,這個(gè)如果你不更的話時(shí)間就會(huì)有很大問題. 習(xí)慣帶到了stm32這邊.
|