日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【STM32】STM32f4学习之路--嘀嗒定时器

發布時間:2025/4/16 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【STM32】STM32f4学习之路--嘀嗒定时器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

嘀嗒定時器,作為stm32特有的系統定時器,它的出現,旨在為用戶在使用OS以及延時的時候提供一個精確的定時。

SysTick 是 MDK 定義了的一個結構體(在 core_m4.h 里面),里面包含 CTRL、LOAD、VAL、CALIB 等 4 個寄存器;


CTRL寄存器:顧名思義就是SYSTick的控制寄存器。它的幾個常用位如下圖,其中CLKSOURCE位為1的時候,嘀嗒計時器將選擇系統時鐘8分頻后的時鐘(即168/8=21),我們一般采用這個。


LOAD:重裝載的值(0-23位)


VAl:返回當前倒計數的值(0-23)


根據以上,我們可以編寫一小段程序作為延時程序:

//nus應小于2^24/21=798915 void _Delay_us(u32 nus) {SysTick->CTRL&=~(1<<2);//選擇時鐘源為21MHzSysTick->CTRL&=~(1<<1);//SYsTick數到0時無動作SysTick->LOAD=21*nus;//裝載的值,此值每減1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒計數數到0} void _Delay_ms(u32 nms) {SysTick->CTRL&=~(1<<2);//選擇時鐘源為21MHzSysTick->CTRL&=~(1<<1);//SYsTick數到0時無動作SysTick->LOAD=21000*nms;//裝載的值,此值每減1,需要1/21us,故用21*nusSysTick->CTRL|=(1<<0);//使能SySTickwhile(!(SysTick->CTRL&(1<<16)));//等待倒計數數到0}

Systick 的時鐘來自系統時鐘 8 分頻, 正因為如此,系統時鐘如果不是 8 的倍數(不能被 8 整除),則會導致延時函數不準確,所以STM32的外部晶振一般采用8MHz的。

總結

以上是生活随笔為你收集整理的【STM32】STM32f4学习之路--嘀嗒定时器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。