STM32怎样实现延时?
答案是操作Systick系統嘀嗒定時器。這個定時器比較特殊,它屬于Cortex-M3處理器內核外設,故并非STM32所特有,而是所有以CM3為內核的MCU都具有的一種定時器。CM3提供了4個寄存器來控制Systick的行為,其中的校準數值寄存器不常用,一般只用到以下3個。
在core_cm3.h中對Systick寄存器的定義如下。SysTick_BASE表示SysTick控制及狀態寄存器的起始地址,SysTick_Type結構體的成員即為按地址順序排列的4個寄存器,SysTick就是把從SysTick_BASE開始的連續16個字節的區域定義為嘀嗒時鐘。
可以通過操作SysTick寄存器以實現系統延時,這里給出一種實現us級、ms級和s級延時的實現方法。以us級延時為例,首先設置了重裝載數值寄存器大小,這個值決定了每經過多長時間SysTick的當前倒計數值減為0,它取決于時鐘源的時鐘頻率。例如時鐘頻率為AHB72MHz的話,想實現1us定時,則LOAD寄存器設置為72,表示每經歷72個系統嘀嗒數SysTick完成一次倒計數過程,也就是經歷72*(1/72000000)s即1us。設置VAL寄存器為0,可清除CTRL寄存器的位COUNTFLAG。設置CTRL寄存器為5的意思是,將SysTick時鐘源設為內核時鐘即頻率為72MHz,設置位TICKINT為0即倒數到0時不發生異常請求,因為這里沒有使用SysTick中斷,設置位ENABLE為1使能定時器。到這里定時器配置就做完了,定時器開始倒計數。接著對于每一個微秒,在定時器倒計數過程期間,不斷查詢寄存器CTRL的位COUNTFLAG的值,如果該位變為1則表明一次倒計數過程完畢即經歷的1us,此時for循環跳到下一個微秒繼續重復此操作,最終實現延時目標微秒數。循環完成后操作CTRL寄存器關閉定時器。ms級延時的實現過程也一樣。
總結
以上是生活随笔為你收集整理的STM32怎样实现延时?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “有幸笔墨是小舟 任我自在游”在林曦的小
- 下一篇: 治愈系书单|林曦《只生欢喜不生愁》