<li id="ar4ly"></li>

      <ol id="ar4ly"></ol>

    1. <button id="ar4ly"><object id="ar4ly"></object></button>
      <button id="ar4ly"></button>

      <progress id="ar4ly"><sub id="ar4ly"></sub></progress>

        1. 全國免費咨詢熱線:0512-57750678  18021615678
          您的位置:首頁 > 新聞資訊 > 單片機

          STM32 SysTick 精確延時(非中斷方式)

          分類:單片機 發布:2022-03-10 22:38:36 瀏覽:247次 Tag:

          SysTick是Cortex-M內核自帶的一個24位定時器,所以我們可以在core_cm3.h或core_cm4.h頭文件中看到它的寄存器定義和配置函數SysTick_Config()。SysTick的功能非常簡單,僅僅提供一個時基功能,支持中斷請求,因此它的寄存器寥寥無幾。

          以下是手冊上對SysTick寄存器的介紹:


          CTRL為控制寄存器:

          ENABLE:使能位

          TICKINT: 中斷的開關,當計數溢出且TICKINT=1時SysTick將發出中斷申請。

          CLKSOURCE:時鐘選擇位,CLKSOURCE=1時選擇系統時鐘,如果是M3則為72MHz,M4則為168MHz。否側選擇外部時鐘作為時鐘源。

          COUNTFLAG: 溢出標志位,計數到0時置1,而且硬件自動清零。

          LOAD為重載值寄存器:

          當計數到0時SysTick自動將此寄存器的值加載到VAL寄存器中。注意它是24位的,所以最大值為0XFFFFFF。

          VAL為當前值寄存器:

          SysTick是從上往下計數的,所以此寄存器的值是遞減的。

          那么,了解了SysTick的寄存器之后就可以配置它了。首先將CLKSOURCE位置1,選擇系統時鐘作為時鐘源,以M4內核為例,就是168MHz。為了讓SysTick每1us溢出一次,就須要把重載值設置為167(168-1)。當需要延時n(us)時,就將ENABLE位置1,讓SysTick開始計時,然后等待n次COUNTFLAG標志之后退出就行了。

          下面是示例代碼:

          #include "delay.h"  

            

          void delay_config(void)  

          {  

              SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;     //時鐘源為系統時鐘168MHz  

              SysTick->LOAD = 167;                 //重載值為168-1,每1us溢出一次  

          }  

            

          void delay_ms(vu32 nTime)  

          {  

              nTime *= 1000;  

              SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;        //使能SysTick,開始計數  

              while(nTime--){  

                  while((SysTick->CTRL&0X010000) == 0);        //等待COUNTFLAG標志位置1  

              }  

              SysTick->CTRL &= (~SysTick_CTRL_ENABLE_Msk);     //失能SysTick,停止計數  

          }  

            

          void delay_us(vu32 nTime)  

          {  

              SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;  

              while(nTime--){  

                  while((SysTick->CTRL&0X010000) == 0);  

              }  

              SysTick->CTRL &= (~SysTick_CTRL_ENABLE_Msk);  

          }  


          相關文章

          江蘇豹發力電子科技有限公司 版權所有 未經授權禁止復制或鏡像
          CopyRight 2022   www.nclinghe.com  All rights reserved

          電話:0512-57750678   E-mai:1989186555@qq.com  蘇ICP備2022026117號-1

          小的学生VIDEOSEX