在專案中使用i2c介面感測器時要求有比較精確的延時,在網上搜了下,如果不想用中斷systick定時器可以做到,找到如下資料:
主要仿照原子的《stm32
不完全手冊》。
systick
的時鐘固定為
hclk
時鐘的1/8
,在這裡我們選用內部時鐘源
72m,所以
systick
的時鐘為
9m,即
systick
定時器以
9m的頻率遞減。
systick
主要包含
ctrl
、load
、val
、calib 等4
個暫存器,
systick->ctrl
位段名稱
型別復位值
描述countflag
r如果在上次讀本暫存器後systick已為0
,則該位為1,若
讀該位自動清零
clksource
rw0:外部時鐘源
1:內部時鐘
tickint
rw0:減到
0無動作;
1:減到0產生
systick
異常請求
enable
rwsystick定時器使能位
systick-> load
位段名稱
型別復位值
描述23:0
reload
rw減到0
時被重新裝載的值
systick-> val
位段名稱
型別復位值
描述23:0
current
rw讀取時返回當前倒計數的值,寫則清零,同時還會清除在systick
控制及狀態暫存器中的
countflag 標誌
systick-> calib 不常用,在這裡我們也用不到,故不介紹了。
/*定時器初始化函式*/
void delay_init(u8t sysclk) //sysclk為系統時鐘頻率除以1000000後的值,例:如果系統時鐘頻率為72mhz,則呼叫該函式時此處的實參為72
/*1微秒延時函式*/
void delay_us(u32t nus)
while(temp&0x01&&!(temp&0x10000));
systick->ctrl=0x00;
systick->val=0x00;
}/*1毫秒延時函式*/
void delay_ms(u16t nms)
while(temp&0x01&&!(temp&0x10000));
systick->ctrl=0x00;
systick->val=0x00;
}
stm32利用SysTick實現精確定時
stm32定時器資源雖然豐富,但是在一些專案中,我們任然希望不借助傳統定時器實現精確延時,這樣在面對一些對定時器資源需求多的專案我們剩下資源用來做該做事情。stm32用的是arm cortex mx系列的核心,該核心具有乙個滴答時鐘,這個滴答時鐘大意就是在配置完時鐘源和使能以後能進入到中斷處理函式中...
stm32的Systick定時器
systick定時器簡介 systick定時器就是系統滴答定時器,乙個24 位的倒計數定時器,計到0 時,將從reload 暫存器中自動重裝載定時初值。只要不把它在systick 控制及狀態暫存器中的使能位清除,就永不停息,即使在睡眠模式下也能工作。systick定時器被 在nvic中,用於產生sy...
Stm32學習(三)Systick的學習
1.systick定時器 systick定時器,是乙個簡單的定時器,對於cm3,cm4核心晶元,都有systick定時器。systick定時器常用來做延時,或者實時系統的心跳時鐘。這樣可以節省mcu資源,不用浪費乙個定時器。比如ucos中,分時復用,需要乙個最小的時間戳,一般在stm32 ucos系...