利用 STM32 的內部 SysTick 來實現延時的,這樣既不占用中斷,也不占用系統定時器。因為在 ucos 下 systick 不能再被隨意更改,如果我們還想利用 systick 來做 delay_us 或者delay_ms 的延時,就必須想點辦法了,這裡我們利用的是時鐘摘取法。以 delay_us 為例,比如delay_us (50),在剛進入 delay_us 的時候先計算好這段延時需要等待的 systick 計數次數,這裡為 50*9 (假設系統時鐘為 72Mhz,那麼 systick 每增加 1,就是 1/9us) ,然後我們就一直統計 systick的計數變化,直到這個值變化了 50*9,一旦檢測到變化達到或者超過這個值,就說明延時 50us時間到了。———實質上就是不改變systick基本單位時長,以基本單位時長為基本元做多次到達摘取。