STM8L1xx利用定時器實現毫秒和微妙延時

2021-07-10 03:12:20 字數 1648 閱讀 5240

採用微控制器的定時計數器進行毫秒和微妙級延時,精度較準。檢測溢位時產生的標誌位來判斷延時到達。下面以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...