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