STM32F0_SYSTICK在STM32CUBEMX中的設定
阿新 • • 發佈:2018-11-04
用過STM32CUBEMX的童鞋們都知道,程式碼生成的時候預設HAL_Delay延時單位為ms,當程式中要用到us延時的時候該怎麼辦呢!
最終評估下來,感覺原子的思路比較靠譜,不帶OS的設計理念是搞清楚SYSTICK的RELOAD暫存器的數值代表什麼,程式碼生成時預設為47999,也就是說
定時器從47999減1減到0的時候,時間過了1000us,換算後得出數值從47減到1的時候時間過了1us.
無需更改任何其它程式碼,直接在需要的地方插入HAL_Delay_us(nus);void HAL_Delay_us(__IO uint32_t delay_us) { uint32_t first_value = 0; uint32_t current_value = 0; uint32_t reload = SysTick ->LOAD; uint32_t nus_number = delay_us * ((reload + 1) / 1000); uint32_t change_number = 0; first_value = SysTick ->VAL; while(1) { current_value = SysTick ->VAL; if(current_value != first_value) { if(current_value < first_value) { change_number += first_value - current_value; //change_number = first_value - current_value + change_number; } else { change_number += reload - current_value + first_value; } first_value = current_value; if(change_number >= nus_number) { break; } } } }