chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

關于STM32的計數(shù)與延時

黃工的嵌入式技術圈 ? 來源:黃工的嵌入式技術圈 ? 2020-03-12 11:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Ⅰ關于STM32的計數(shù)和延時

在STM32中,具有計數(shù)(或計時)功能的模塊基本都能實現(xiàn)延時功能。如:系統(tǒng)滴答SysTick、定時器TIM、實時時鐘RTC、看門狗WDG。

精確延時一般使用定時器TIM即可實現(xiàn)。當然,是否精確,取決于你的主頻(也就是晶振)是否準確,如果主頻精確,那么實現(xiàn)的延時也一定精確。

一般來說,常溫下實現(xiàn)us微秒級的延時,誤差還是挺小的(應該說挺精確)。拿F407,主頻168M來說,可以實現(xiàn)幾十ns納秒的延時,如果選用高精度的晶振,誤差還是很小的。

總結:想要TIM定時器實現(xiàn)高精確的延時,就需要高精度的晶振。主頻精確,那么延時就精確。

ⅡSTM32的TIM定時器

STM32的定時器有3類:

高級定時器Advanced control Timer

通用定時器General purpose Timer

基本定時器BasicTimer

STM32的這三種定時器都能實現(xiàn)最基本的定時計數(shù)功能。差異在于它們的功能多少不一樣,從結構圖一目了然,下面以STM32F4為例,給大家展示一下F4三類定時器的結構圖:

高級定時器

通用定時器

基本定時器

相信大家看了上面3種結構圖,心里大概應該明白它們的差異存在哪些地方。具體差異可以參看手冊中的“主要特性”,里面詳細講述了其中的功能和特性。

重要提示:

1.定時器的位數(shù)有16位和32位之分,詳見數(shù)據(jù)手冊。

2.定時器有多少個,以及是TIM幾,同樣見數(shù)據(jù)手冊。如下圖STM32F411就只有8個定時器,沒有基本定時器。

ⅢSTM32定時器計數(shù)延時原理

上面3種定時器(高級、通用和基本)都能實現(xiàn)計數(shù)延時的功能,我們以最簡單的基本定時器為例,還是參看著結構圖來說明:

1.來自RCC的時鐘,參看RCC時鐘樹,一般是SystemCoreClock或者SystemCoreClock/2, 如STM32F429的就是(180M/2)。

2.分頻CK_PSC之后就是計數(shù)器CK_CNT的計數(shù)頻率。

如分頻值位9,則計數(shù)頻率為1M. (180M / 2 /9= 10M).

3.實現(xiàn)1us計數(shù):

上面1秒計數(shù)10M個數(shù),那么我計10個數(shù),就是1us的時間。只需要在自動重載寄存器ARR中填充10 - 1即可。

代碼分析:

紅定義

//計數(shù)時鐘(相當于1秒鐘計數(shù)10M次個脈沖) #define TIM6_COUNTER_CLOCK 10000000 //預分頻值 #define TIM6_PRESCALER_VALUE (SystemCoreClock/2/TIM6_COUNTER_CLOCK - 1) //定時周期(計數(shù)滿10個算一個周期,也就是1us) #define TIM6_PERIOD_TIMING (10 - 1)

配置

void TIM6_Configuration(void){ TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; /* TIM6時基單元配置 */ TIM_TimeBaseStructure.TIM_Prescaler = TIM6_PRESCALER_VALUE; //預分頻值 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上計數(shù)模式 TIM_TimeBaseStructure.TIM_Period = TIM6_PERIOD_TIMING; //定時周期 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //時鐘分頻因子 TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE); //使能"更新"中斷 }

如果需要中斷,則開啟1us中斷。

定時器阻塞延時

void TIM6_Nus(uint16_t Times){ TIM_Cmd(TIM6, ENABLE); //啟動定時器 while(Times--) { while(TIM_GetFlagStatus(TIM6, TIM_FLAG_Update) == RESET); //等待計數(shù)完成 TIM_ClearFlag(TIM6, TIM_FLAG_Update); //清除標志 } TIM_Cmd(TIM6, DISABLE); //關閉定時器 }

以上代碼,之前有分享過類似的,在下載區(qū) STM32F417_第一階段里面。

提示:

1.這類阻塞延時,僅供學習其原理使用,請結合實際項目修改代碼。

2.可以通過定時中斷 + 讀取計數(shù)器的值來獲取精確的時間。

比如:1ms中斷一次,同時,計數(shù)累加。獲取計數(shù)值 +累計值也能得出精確延時。 (當然,中斷不能太頻繁), 此原理,適用于其他SysTick,RTC等具有計數(shù)功能的模塊。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 延時
    +關注

    關注

    0

    文章

    110

    瀏覽量

    26241
  • STM32
    +關注

    關注

    2307

    文章

    11128

    瀏覽量

    371484
  • Tim
    Tim
    +關注

    關注

    0

    文章

    84

    瀏覽量

    18912
  • 計數(shù)
    +關注

    關注

    1

    文章

    58

    瀏覽量

    20570
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Cortex-M內(nèi)核中的精確延時的方法

    )。 要實現(xiàn)延時的功能,總共涉及到三個寄存器:DEMCR 、DWT_CTRL、DWT_CYCCNT,分別用于開啟DWT功能、開啟CYCCNT及獲得系統(tǒng)時鐘計數(shù)值。 DEMCR使能DWT_CYCCNT
    發(fā)表于 11-21 07:51

    使用系統(tǒng)定時器SysTick來實現(xiàn)精確延時微秒和毫秒函數(shù)

    到 0 時,將從RELOAD 寄存器中自動重裝載定時初值,開始新一輪計數(shù)。使用內(nèi)核的SysTick定時器來實現(xiàn)延時,可以不占用系統(tǒng)定時器,由于和MCU外設無關,所以代碼的移植,在不同廠家的Cortex-M
    發(fā)表于 11-20 07:12

    感知再進化,新增“觸發(fā)延時”功能!

    ——「觸發(fā)延時」正式上線!這不僅是一個功能的增加,更是對產(chǎn)品穩(wěn)定性和場景適用性的一次深刻優(yōu)化。一、亮點速覽什么是“觸發(fā)延時”功能?簡單來說,“觸發(fā)延時”是指在雷達檢測到
    的頭像 發(fā)表于 11-10 11:05 ?370次閱讀
    感知再進化,新增“觸發(fā)<b class='flag-5'>延時</b>”功能!

    如何利用蜂鳥HbirdV2-SoC自帶外設PWM進行毫秒級的延時和計時

    ,顯然,計數(shù)16次實現(xiàn)1us延遲是極不精準的。為了達到一定了精度要求,本例中僅實現(xiàn)50us的延時。 其次,TIM0的計數(shù)寄存器僅為16位,用在16MHz主時鐘對其進行計數(shù)時,最大de
    發(fā)表于 10-30 07:47

    探頭的延時介紹

    探頭的延時是指信號從被測點傳輸?shù)绞静ㄆ鬏斎攵说臅r間間隔,即信號經(jīng)過探頭的探針、傳輸電纜、內(nèi)部電路等路徑后,到達示波器采樣系統(tǒng)的總時間延遲,(以下討論低速信號情景,忽略示波器通道間ps級的延時誤差)。不同型號的探頭延時存在差異,尤
    的頭像 發(fā)表于 09-17 17:32 ?681次閱讀
    探頭的<b class='flag-5'>延時</b>介紹

    認識探頭的延時

    探頭的延時是指信號從被測點傳輸?shù)绞静ㄆ鬏斎攵说臅r間間隔,即信號經(jīng)過探頭的探針、傳輸電纜、內(nèi)部電路等路徑后,到達示波器采樣系統(tǒng)的總時間延遲,(以下討論低速信號情景,忽略示波器通道間ps級的延時誤差
    的頭像 發(fā)表于 08-26 17:04 ?669次閱讀
    認識探頭的<b class='flag-5'>延時</b>

    STM32F030內(nèi)部晶振怎么設置,內(nèi)部晶振是延時函數(shù)怎么設置?

    STM32F030內(nèi)部晶振怎么設置,內(nèi)部晶振是延時函數(shù)怎么設置 使用STM32F030時沒使用內(nèi)部晶振怎么設置,使用內(nèi)部晶振時延時函數(shù)怎么寫?謝謝大俠
    發(fā)表于 04-23 07:45

    STM32U083進行外部計數(shù)只能計數(shù)8000多一點,為什么?

    背景: 使用LPTIME1進行計數(shù)。 LPTIMER配置如下: 時鐘配置如下: 使用過LSE;PCLK配置,計數(shù)還是一樣的 實際計數(shù)只能計數(shù)到8000多;使用信號發(fā)生器產(chǎn)生9KHz
    發(fā)表于 03-12 06:21

    使用STM32F030時沒使用內(nèi)部晶振怎么設置,使用內(nèi)部晶振時延時函數(shù)怎么寫?

    STM32F030內(nèi)部晶振怎么設置,內(nèi)部晶振是延時函數(shù)怎么設置 使用STM32F030時沒使用內(nèi)部晶振怎么設置,使用內(nèi)部晶振時延時函數(shù)怎么寫?謝謝大俠
    發(fā)表于 03-07 08:13

    STM32G070 UART串口,低波特率傳送數(shù)據(jù)時,TIMER出現(xiàn)嚴重延時現(xiàn)象如何解決?

    STM32G070, UART串口,低波特率傳送數(shù)據(jù)時,TIMER出現(xiàn)嚴重延時現(xiàn)象,傳送數(shù)據(jù)長的話,導致系統(tǒng)重啟。如何解決?
    發(fā)表于 03-07 07:07

    STM32C031C6在按鍵中斷處理程序中使用HAL_Delay()延時函數(shù),程序則無法運行怎么解決?

    測試STM32C031C6開發(fā)板的長短按鍵,在按鍵中斷處理程序中使用HAL_Delay()延時函數(shù),程序則無法運行,類似進入了死循環(huán),于是則添加了延時函數(shù)如下: /[i
    發(fā)表于 03-07 06:50

    延時繼電器的工作原理和接線方法

    延時繼電器作為一種在電氣系統(tǒng)中廣泛應用的控制元件,具有在電路中實現(xiàn)定時閉合或斷開控制的重要功能。通過引入延時功能,對電路系統(tǒng)的精確控制和管理,適應不同的應用場景和需求,提高生產(chǎn)效率、降低
    的頭像 發(fā)表于 02-07 16:09 ?2923次閱讀

    斷電延時繼電器的應用

    延時繼電器作為一種重要的電氣控制元件,在現(xiàn)代電氣系統(tǒng)中發(fā)揮著不可或缺的作用。其基于一個或多個可調(diào)的計時器電路,通過與繼電器相連的控制電路,實現(xiàn)了在電路中定時閉合或斷開控制的功能。 一、工作原理 延時
    的頭像 發(fā)表于 02-07 16:07 ?1999次閱讀

    延時繼電器功能匯總與應用

    延時繼電器是一種在電氣系統(tǒng)中廣泛應用的控制元件,在電路中實現(xiàn)定時閉合或斷開控制,為各種應用場景提供靈活的時間管理功能。 通常,聚英延時繼電器由一個控制電壓引發(fā),該控制電壓可以是任何符合電器設備功能
    的頭像 發(fā)表于 01-17 16:03 ?1221次閱讀

    延時繼電器應用場景

    延時繼電器是一種在電氣系統(tǒng)中廣泛應用的控制元件,通過引入延時功能,實現(xiàn)了在電路中定時閉合或斷開控制的重要任務。 延時繼電器的工作原理,基于一個或多個可調(diào)的計時器電路,2路/4路/8路電路與繼電器相連
    的頭像 發(fā)表于 01-16 16:27 ?1180次閱讀