【STM32】STM32f4学习之路--嘀嗒定时器
生活随笔
收集整理的這篇文章主要介紹了
【STM32】STM32f4学习之路--嘀嗒定时器
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
嘀嗒定時器,作為stm32特有的系統(tǒng)定時器,它的出現(xiàn),旨在為用戶在使用OS以及延時的時候提供一個精確的定時。
SysTick 是 MDK 定義了的一個結構體(在 core_m4.h 里面),里面包含 CTRL、LOAD、VAL、CALIB 等 4 個寄存器;
CTRL寄存器:顧名思義就是SYSTick的控制寄存器。它的幾個常用位如下圖,其中CLKSOURCE位為1的時候,嘀嗒計時器將選擇系統(tǒng)時鐘8分頻后的時鐘(即168/8=21),我們一般采用這個。
LOAD:重裝載的值(0-23位)
VAl:返回當前倒計數(shù)的值(0-23)
根據(jù)以上,我們可以編寫一小段程序作為延時程序:
//nus應小于2^24/21=798915 void _Delay_us(u32 nus) {SysTick->CTRL&=~(1<<2);//選擇時鐘源為21MHzSysTick->CTRL&=~(1<<1);//SYsTick數(shù)到0時無動作SysTick->LOAD=21*nus;//裝載的值,此值每減1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒計數(shù)數(shù)到0} void _Delay_ms(u32 nms) {SysTick->CTRL&=~(1<<2);//選擇時鐘源為21MHzSysTick->CTRL&=~(1<<1);//SYsTick數(shù)到0時無動作SysTick->LOAD=21000*nms;//裝載的值,此值每減1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒計數(shù)數(shù)到0}Systick 的時鐘來自系統(tǒng)時鐘 8 分頻, 正因為如此,系統(tǒng)時鐘如果不是 8 的倍數(shù)(不能被 8 整除),則會導致延時函數(shù)不準確,所以STM32的外部晶振一般采用8MHz的。
總結
以上是生活随笔為你收集整理的【STM32】STM32f4学习之路--嘀嗒定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【STM32】STM32f4学习之路--
- 下一篇: 【BLE】信号强度(RSSI)知识整理