国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于STM32的hal庫中滴答定時(shí)器uwTick溢出的思考和分析

這篇具有很好參考價(jià)值的文章主要介紹了關(guān)于STM32的hal庫中滴答定時(shí)器uwTick溢出的思考和分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

思考:如果中斷函數(shù)HAL_IncTick中的uwTick一直增加導(dǎo)致溢出會(huì)不會(huì)導(dǎo)致延時(shí)不準(zhǔn)?
下面展示一些 STM32的官方庫文件stm32f1xx_hal.c部分摘錄

__weak void HAL_IncTick(void)
{
  uwTick += uwTickFreq;
}
__weak uint32_t HAL_GetTick(void)
{
  return uwTick;
}
__weak void HAL_Delay(uint32_t Delay)
{
  uint32_t tickstart = HAL_GetTick();
  uint32_t wait = Delay;

  /* Add a freq to guarantee minimum wait */
  if (wait < HAL_MAX_DELAY)
  {
    wait += (uint32_t)(uwTickFreq);
  }
  while((HAL_GetTick() - tickstart) < wait)
  {
  }
}

1.問題:

系統(tǒng)Tick頻率設(shè)置為1毫秒中斷一次,每1ms產(chǎn)生一次Tick中斷,
在Tick中斷中uwTick++; 那么當(dāng)自增到0xFFFFFFFF后就會(huì)溢出,再從0開始自增 。
0xFFFFFFFF毫秒大約為49.71天,也就是49天以后會(huì)產(chǎn)生第一次溢出
如果恰巧在延時(shí)時(shí)有溢出會(huì)導(dǎo)致不準(zhǔn)嗎?

2.分析:

每1ms產(chǎn)生一次Tick中斷,在Tick中斷中uwTick++;
uint32_t HAL_GetTick()函數(shù)返回的是當(dāng)前uwTick的值。

假設(shè)uwTick已經(jīng)計(jì)數(shù)到65530,調(diào)用HAL_Delay(10);
tickstart = 65530,但是wait是11,那么當(dāng)uwTick=65535+1,就會(huì)溢出uwTick= 0,
執(zhí)行while((HAL_GetTick() - tickstart) < wait){}
當(dāng)HAL_GetTick()返回0時(shí)的情況:(HAL_GetTick() - tickstart) =(0-65530)
可能認(rèn)為這是個(gè)負(fù)數(shù),此時(shí)會(huì)導(dǎo)致((HAL_GetTick() - tickstart) < Delay) = ((0 - 65530) < 10)=FALSE
事實(shí)并非如此,因?yàn)镠AL_GetTick()的返回值、tickstart和Delay都是uint32_t 型數(shù)據(jù),這樣HAL_GetTick() - tickstart的結(jié)果不可能是負(fù)數(shù)!(重點(diǎn))
此時(shí)計(jì)算uwTick-tickstart=0-65530=-65530:二進(jìn)制表示0000 0000 0000 0110,無符號(hào)十進(jìn)制=6,
那么當(dāng)uwTick=5(0000 0000 0000 0101)時(shí),
uwTick-tickstart=5-65530=-65525,二進(jìn)制表示0000 0000 0000 1011,
延時(shí)還是11ms(0000 0000 0000 1011),所以無符號(hào)的uwTick溢出并不會(huì)導(dǎo)致延遲錯(cuò)亂,此處差值不存在負(fù)數(shù),要考慮好無符號(hào)數(shù)的計(jì)算方法。

這個(gè)問題的主要依據(jù)是使用了計(jì)算機(jī)的原碼,反碼,補(bǔ)碼的知識(shí)??梢詤⒖既缦骆溄?寫的非常好
鏈接: https://www.cnblogs.com/zhangziqiu/archive/2011/03/30/ComputerCode.html

反轉(zhuǎn)

后來我看到有人評(píng)論uint32_t是32位,最大數(shù)位4294967295,就突然覺得上面舉例不成立了,后來仔細(xì)想了想,其實(shí)原理都一樣,只不過是到4294967295才會(huì)溢出,上面舉的例子把65530改為4294967290就合理了。
uwTick-tickstart=5-4294967290=-4294967285,十六進(jìn)制表示FFFF 0000 000B,
延時(shí)還是11ms(0000 000B),

3.拓展

編碼器計(jì)算速度
使用定時(shí)器編碼器模式計(jì)數(shù)編碼器的脈沖,當(dāng)計(jì)數(shù)值達(dá)最大溢出時(shí),相減仍然可以得到差值,用來計(jì)算速度。文章來源地址http://www.zghlxwxcb.cn/news/detail-842065.html

到了這里,關(guān)于關(guān)于STM32的hal庫中滴答定時(shí)器uwTick溢出的思考和分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • STM32系統(tǒng)滴答定時(shí)器SysTick實(shí)現(xiàn)精確ms和us延時(shí)

    時(shí)間記錄:2023/12/11 一、時(shí)間的計(jì)算 STM32F103C8T6單片機(jī)為例,系統(tǒng)時(shí)鐘為72MHz,則一個(gè)時(shí)鐘周期為(1/72M)秒,即1/72us 二、寄存器介紹 (1)CTRL控制及狀態(tài)寄存器 位段 名稱 描述 16 COUNTFLAG 當(dāng)計(jì)數(shù)到0時(shí),該位置為1,當(dāng)讀取該位時(shí),自動(dòng)清零 2 CLKSOURCE 值為0時(shí)選擇外部時(shí)鐘源,值為

    2024年01月24日
    瀏覽(44)
  • STM32 F103C8T6學(xué)習(xí)筆記4:時(shí)鐘樹、滴答計(jì)時(shí)器、定時(shí)器定時(shí)中斷

    STM32 F103C8T6學(xué)習(xí)筆記4:時(shí)鐘樹、滴答計(jì)時(shí)器、定時(shí)器定時(shí)中斷

    今日理解一下STM32F103 C8T6的時(shí)鐘與時(shí)鐘系統(tǒng)、滴答計(jì)時(shí)器、定時(shí)器計(jì)時(shí)中斷的配置,文章提供原理,代碼,測(cè)試工程下載。 目錄 時(shí)鐘樹與時(shí)鐘系統(tǒng): 滴答計(jì)時(shí)器: 定時(shí)器計(jì)時(shí)中斷: 測(cè)試結(jié)果: 測(cè)試工程下載: 該系統(tǒng)介紹在 STM32F10x-中文參考手冊(cè) P56頁開始 微控制器的時(shí)鐘系

    2024年02月13日
    瀏覽(32)
  • 基于STM32的定時(shí)器--定時(shí)中斷(HAL庫)

    基于STM32的定時(shí)器--定時(shí)中斷(HAL庫)

    本文旨在介紹如何使用STM32CubeMX配置+KEIL 5開發(fā)一個(gè)每10us定時(shí)器中斷觸發(fā)一次的項(xiàng)目。幫助初學(xué)者入門STM32的定時(shí)器使用。 定時(shí)器是STM32微控制器中非常重要的功能模塊之一,用于計(jì)時(shí)、生成精確的時(shí)間延遲、觸發(fā)事件等。STM32微控制器通常具有多個(gè)定時(shí)器模塊,包括通用定時(shí)

    2024年02月14日
    瀏覽(23)
  • STM32 HAL庫-定時(shí)器中斷

    STM32 HAL庫-定時(shí)器中斷

    關(guān)閉或開啟所有中斷;代碼如下: STM32F407 有眾多的定時(shí)器,其中包括 2 個(gè)基本定時(shí)器(TIM6 和 TIM7)、10 個(gè)通用定時(shí) 器(TIM2 ~ TIM5、TIM9 ~TIM14)、2 個(gè)高級(jí)控制定時(shí)器(TIM1 和 TIM8),這些定時(shí)器彼此完 全獨(dú)立,不共享任何資源。 選擇定時(shí)器,配置時(shí)鐘源,設(shè)置預(yù)分頻系數(shù),計(jì)

    2024年01月25日
    瀏覽(23)
  • stm32——hal庫學(xué)習(xí)筆記(定時(shí)器)

    stm32——hal庫學(xué)習(xí)筆記(定時(shí)器)

    使用純軟件(CPU死等)的方式實(shí)現(xiàn)定時(shí)(延時(shí))功能 使用精準(zhǔn)的時(shí)基,通過硬件的方式,實(shí)現(xiàn)定時(shí)功能 遞增計(jì)數(shù)模式實(shí)例說明 中心對(duì)齊模式實(shí)例說明 TIM6 和TIM7 控制寄存器 1(TIMx_CR1) TIM6 和TIM7 DMA/中斷使能寄存器(TIMx_DIER) TIM6 和TIM7 狀態(tài)寄存器(TIMx_SR) TIM6 和TIM7 計(jì)數(shù)器(TIMx_CNT)

    2024年02月21日
    瀏覽(30)
  • # HAL庫STM32常用外設(shè)教程(四)—— 定時(shí)器 基本定時(shí)

    # HAL庫STM32常用外設(shè)教程(四)—— 定時(shí)器 基本定時(shí)

    1、STM32F407ZGT6 2、STM32CubeMx軟件 3、keil5 內(nèi)容簡(jiǎn)述: 通篇文章將涉及以下內(nèi)容,如有錯(cuò)誤,歡迎指出 : 1、基礎(chǔ)定時(shí)器特性 2、基礎(chǔ)定時(shí)器的結(jié)構(gòu)和功能 3、基礎(chǔ)定時(shí)器HAL庫驅(qū)動(dòng)程序 (1)CubeMx配置 (2)TIM驅(qū)動(dòng)程序 ??STM32F407有2個(gè)高級(jí)控制定時(shí)器(TIM1、TIM8)、8個(gè)通用定時(shí)器和

    2024年02月02日
    瀏覽(22)
  • STM32 HAL庫 STM32CubeMX -- TIM(定時(shí)器中斷)

    STM32 HAL庫 STM32CubeMX -- TIM(定時(shí)器中斷)

    STM32F1 系列中,除了一些特殊的型號(hào),大部分F1有8 個(gè)定時(shí)器,分為 基本定時(shí)器,通用定時(shí)器和高級(jí)定時(shí)器 。 基本定時(shí)器TIM6 和TIM7 是一個(gè)16 位的只能向上計(jì)數(shù)的定時(shí)器,只能定時(shí),沒有外部IO。 通用定時(shí)器TIM2/3/4/5 是一個(gè)16 位的可以向上/下計(jì)數(shù)的定時(shí)器,可以定時(shí),可以輸出

    2024年02月16日
    瀏覽(18)
  • STM32 HAL庫開發(fā)——入門篇(2):定時(shí)器

    STM32 HAL庫開發(fā)——入門篇(2):定時(shí)器

    一、TIMER定時(shí)器概述 1.1 軟件定時(shí)原理 1.2 定時(shí)器定時(shí)原理 1.3 STM32定時(shí)器分類 1.4 STM32定時(shí)器特性表 1.5 STM32基本、通用、高級(jí)定時(shí)器功能整體的區(qū)別 二、基本定時(shí)器 2.1 基本定時(shí)器簡(jiǎn)介 2.3 STM32定時(shí)器計(jì)數(shù)模式及溢出條件 2.4 定時(shí)器中斷實(shí)驗(yàn)相關(guān)寄存器 2.5 定時(shí)器溢出時(shí)間計(jì)算方

    2024年02月10日
    瀏覽(24)
  • STM32 hal庫編程定時(shí)器計(jì)數(shù)清零

    1、stm32定時(shí)器是有重裝載功能的,所以定時(shí)器中斷不關(guān)的話,就不需要計(jì)數(shù)清零 2、主要是應(yīng)對(duì)單次計(jì)時(shí)使用,可能因?yàn)闆]有清零導(dǎo)致程序再次運(yùn)行到相同位置時(shí),中斷立即出發(fā),沒有完成計(jì)時(shí)的功能。 順便加一個(gè)讀取定時(shí)器計(jì)數(shù)值得函數(shù)

    2024年02月03日
    瀏覽(33)
  • STM32 HAL庫 STM32CubeMX -- TIM(定時(shí)器輸入捕獲)

    STM32 HAL庫 STM32CubeMX -- TIM(定時(shí)器輸入捕獲)

    輸入捕獲可以對(duì) 輸入的信號(hào)的上升沿、下降沿或者雙邊沿進(jìn)行捕獲 ,常用的有 測(cè)量輸入信號(hào)的脈寬 和 測(cè)量PWM 輸入信號(hào)的頻率 和 占空比 這兩種。 輸入捕獲的原理 就是,當(dāng)捕獲到信號(hào)的跳變沿的時(shí)候,把計(jì)數(shù)器CNT 的值鎖存到捕獲寄存器CCR 中,把前后兩次捕獲到的CCR 寄存

    2023年04月14日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包