延時功能,雖然簡單,不過不同的延時需求多了,就很頭疼。
在STM32中實現延時2小時的功能,有以下幾種方式:
1.使用延時函數
可以使用STM32提供的延時函數來實現延時功能,延時函數根據CPU時鐘頻率和延時時間計算出延時的時間,在延時期間CPU處于忙等待狀態。
需要注意的是,延時函數會占用過多的CPU資源,并且在延時期間無法執行其他任務。
這種方式是初學者玩的,如果用到實際項目,除了大聰明,我找不到更好的詞夸你。
2.使用定時器和中斷
可以使用STM32內置的定時器和中斷來實現延時功能。
將定時器配置為2小時的定時周期,并啟用定時器中斷。
在中斷處理函數中設置標志位表示延時結束,并執行相應的操作。
需要注意的是,定時器中斷的頻率不能太高,否則會占用過多的系統資源,但中斷頻率也不能太慢,畢竟定時器是稀缺資源,一個定時器可能有很多不同的定時需求。
這個可能是最多人的選擇,畢竟省心、省成本。
3.使用RTC實時時鐘
可以使用STM32內置的RTC實時時鐘模塊來實現延時功能。
將RTC設置為2小時的計時周期,并啟用RTC中斷。
在中斷處理函數中設置標志位表示延時結束,并執行相應的操作。
需要注意的是,RTC的精度相對于定時器較高,但配置和使用上相對復雜。
我一般不會用這種,因為配置比較麻煩,我比較懶。
4.使用外部實時時鐘模塊
可以使用外部的實時時鐘模塊,如DS1302等,來實現延時功能。
將實時時鐘模塊連接到STM32的GPIO口,通過SPI或I2C等總線協議與STM32進行通信,獲取當前時間并計算出延時結束的時間。
需要注意的是,外部實時時鐘模塊的精度和配置相對于RTC更加復雜。
這種方式有點脫褲子放屁的感覺,還會增加硬件成本,不過有些場合確實需要這樣做,比如你看老板不爽,老板又不懂技術的時候。
5.無際原創的程序架構
做了單片機開發10幾年,終于輪到我裝逼了,如果是我,我肯定用自己寫的輪詢架構去實現。
比如說上面hal_LedProc這個任務,不管我要定時多長時間去執行,我只需要修改一個數值就可以。
比如2小時換算成ms就是7200000ms,任務Tick的時間是10ms,如果想讓hal_LedProc任務2小時執行一次,那就設置成72000方可實現。
定時時間到了以后,需要執行什么程序,直接放在hal_LedProc函數里即可,這就很舒服…
審核編輯:劉清
-
cpu
+關注
關注
68文章
10872瀏覽量
211973 -
STM32
+關注
關注
2270文章
10904瀏覽量
356307 -
延時函數
+關注
關注
0文章
25瀏覽量
10025 -
定時器中斷
+關注
關注
0文章
49瀏覽量
11215
原文標題:stm32如何延時兩小時,用哪種方式好?
文章出處:【微信號:nanshuqg,微信公眾號:無際單片機編程】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論