採用微控制器的定時計數器進行毫秒和微妙級延時,精度較準。檢測溢位時產生的標誌位來判斷延時到達。下面以stm8l101晶元為例及配合**說明。
一、實現原理:
1、初始化timer2時鐘源(附上相應**)
void tim2init (void)
開啟外設時鐘源;
選擇向上計數模式和開啟自動重載入功能;
填裝計數器的初始值;
關閉timer2中斷功能;
關閉timer2;
2、毫秒延時**示例
void delayms (uint16_t timeval)
tim2->cr1 &= (~tim_cr1_cen); /*disable timer2*/
}
設定timer2分頻,向上加1計數模式,填裝自動過載暫存器目標值。這裡每經過8us計數器加1,從0一直到124,共延時1ms,這時timer2產生溢位標誌位。通過檢查暫存器tim2->sr1的位[0]判斷。
for(i = 0; i < timeval; i++)
先軟體清除tim2->sr1位[0],再等待判斷tim2->sr1位[0]。這裡加上for迴圈,表示延時多少毫秒。
關閉timer2。
3、微妙延時**示例
void delayus (uint16_t timeval)
} tim2->cr1 &= (~tim_cr1_cen); /*disable timer*/
}
設定timer2分頻係數,向上加1計數模式,計數器初始值和自動重裝載目標值。這裡計數器每經過1us自動做加1計數。
清除溢位標誌位,並開啟timer2;
while(1)
}
這裡不是檢測溢位標誌位,而是檢測計數器當前的計數值。比較是否等於預定設定值。
關閉timer2。
定時器 STM32定時器 基本定時器1
我是鼎!定時器時鐘一定要明確其中有哪些變數。上圖為stm407資料手冊摘出來的,可能看不清楚,其實就蘊含了幾點資訊。注意一點,我們看圖2,我們以apb1舉例,上面掛著很多的外設,包括usart1 adc 以及定時器,我們知道apb1上面最高時鐘頻率為84mhz,但是定時器的時鐘是要在此基礎上乘2,也...
利用定時器1實現流水燈
首先要求使用定時器1,且定時1s,那麼先將基礎的初始化函式完成,計算初值為1ms.在服務函式中定義乙個計數變數count並且讓count自增,當count 1000時即達到要求的1s.接著題目要求led燈 先從左至右,再從右至左移動,這一功能通過使用左移函式與右移函式來完成,具體看示例程式 incl...
STM8L 簡單定時器使用
stm8l中有多個定時器,tim1最高端,其他都是普通定時器,一般情況下也夠用。最簡單的示例 初始化 tim3時鐘使能 clk peripheralclockconfig clk peripheral tim3,enable 預設初始化 tim3 deinit 最主要處理 設定計數 延時時間 stm...