使用stm32cubemx配製tim1定時,如下圖所示
自動重裝載值為1,向上計數模式,預分頻係數為168-1,也就是167(這裡我用的是f407的板子做的示例,f407晶元主頻為168mhz,設定這個分頻係數,tim1 的時鐘頻率為1mhz,也就是說每1s計數1000000次,換算過來也就是說,1us計數一次)。另外,如果使用的是tim2-7,這幾路定時器時鐘頻率最高84mhz,分頻係數要做修改。
下面是延時函式
void
delay_us
(uint16_t us)
hal_tim_base_stop
(&htim1)
;}
延時函式測試**如下
void
ledtask_function
(void
const
* argument)
}
延時效果如圖所示
由影象可以看出,引腳輸出的高低電平時間為10.4us,延時效果較為理想
還有其他定時器計數方式,只要了解原理,可以靈活的實現精確延時,另外不建議在較為複雜的系統中使用tim中斷延時,容易出現問題。
空**演延時方式精確度略低於定時器延時,但是對於一些us延時精度不是很高的場景已經足夠使用。
f103系列晶元主頻72mhz
/**
* @funnm : delay_sys_us
* @brief : 延時nus
* @param : nus:要延時的us數. 0~204522252(最大值即2^32/fac_us@fac_us=168)
* @retval: void
*/void
delay_sys_us
(uint32_t delay)
//1個delay,大概1.5us
f429晶元主頻180mhz,執行一條指令時間相較於f103系列晶元會短很多,f429系列us延時函式如下
void
delay_sys_us
(uint32_t delay)
;
延時效果如圖
由波形圖可以看出,使用這種延時方式,也可以做到us級延時,但是仔細看會發現,這種波形的延時週期並不穩定,所以較高要求的延時還是盡量使用tim定時器延時
STM32精確延時
前面用 stm32 的gpio 模擬液晶驅動 時序時遇到乙個問題,就是怎樣產生一段較為精確的延時。通常產生一小段延時的方法就是利用乙個遞增或者遞減迴圈進行軟體延時。例 void delay void 我在使用 mplab ide 進行pic 微控制器的開發時,mplab 提供了乙個 watch 跑錶...
關於STM32F103精確延時
為了相容freertos,所以將延時函式統一規範,後續使用方便移植。此延時針對無晶振,示例為系統倍頻64mhz,型號 stm32f103c8t6。新建system資料夾,新增兩個檔案,delay.c和delay.h 以下為delay.c內容 其中系統已倍頻為64m include stm32f10x...
stm32延時一分鐘 STM32精確延時
stm32 精確延時的實現方法 前面用stm32 的gpio 模擬液晶驅動時序時遇到乙個問題,就是怎樣產生一段較為精確的延時。通常產生一小段延時的方法就是 利用乙個遞增或者遞減迴圈進行軟體延時。例 void delay void int i 0x0ff while i 我在使用 mplab ide進...