您好,歡迎訪問(wèn)上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁(yè) ->  新聞資訊 -> 單片機(jī)

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

      文章出處:?jiǎn)纹瑱C(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2020
      11-10

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

      以下是手冊(cè)上對(duì)SysTick寄存器的介紹:


      CTRL為控制寄存器:

      ENABLE:使能位

      TICKINT: 中斷的開(kāi)關(guān),當(dāng)計(jì)數(shù)溢出且TICKINT=1時(shí)SysTick將發(fā)出中斷申請(qǐng)。

      CLKSOURCE:時(shí)鐘選擇位,CLKSOURCE=1時(shí)選擇系統(tǒng)時(shí)鐘,如果是M3則為72MHz,M4則為168MHz。否側(cè)選擇外部時(shí)鐘作為時(shí)鐘源。

      COUNTFLAG: 溢出標(biāo)志位,計(jì)數(shù)到0時(shí)置1,而且硬件自動(dòng)清零。

      LOAD為重載值寄存器:

      當(dāng)計(jì)數(shù)到0時(shí)SysTick自動(dòng)將此寄存器的值加載到VAL寄存器中。注意它是24位的,所以最大值為0XFFFFFF。

      VAL為當(dāng)前值寄存器:

      SysTick是從上往下計(jì)數(shù)的,所以此寄存器的值是遞減的。

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

      下面是示例代碼:

      #include "delay.h"  

        

      void delay_config(void)  

      {  

          SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk;     //時(shí)鐘源為系統(tǒng)時(shí)鐘168MHz  

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

      }  

        

      void delay_ms(vu32 nTime)  

      {  

          nTime *= 1000;  

          SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;        //使能SysTick,開(kāi)始計(jì)數(shù)  

          while(nTime--){  

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

          }  

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

      }  

        

      void delay_us(vu32 nTime)  

      {  

          SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;  

          while(nTime--){  

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

          }  

          SysTick->CTRL &= (~SysTick_CTRL_ENABLE_Msk);  

      }  


      上海意泓電子科技有限責(zé)任公司 版權(quán)所有 未經(jīng)授權(quán)禁止復(fù)制或鏡像

      CopyRight 2020-2025 m.topsschool.com All rights reserved   滬ICP備2021005866號(hào)

      亚洲精品无码va人在线观看,少妇 逼小 水多,国产区免费av,国产精品无码观看

          国产成人精品一区二区三区视频| 日韩精品一级无码毛片| 亚洲 欧美 制服| 精品欧美一区二区三区久久久| 国产超碰97人人在线| 亚洲色一色鲁一鲁鲁| 亚洲中文字幕无码午夜| 久久久久久久999精品毛| AV剧情麻豆映画国产在线观看| 国产精品www| 99这里只有精品观看在线| 欧美一级欧美三级在线观看| 在线无码中文字幕一区| 欧美成人国产在线观看| 国产精品r级在线| 国产中文字幕六九九九| 2021国产精品视频网站| AV中文字幕不卡| 国产乱码精品一vv黄片| 欧美成人免费一区二区| 丰满人妻熟妇无码区五十路久久| 人妻欧美精品片在线97| 免费精品久久久久久中文字幕| 下面一进一出好爽视频| 国产精品美女高潮视频| 亚洲制服师生无码| 国偷自产av一区二区三区| 无码一级片免费在线| 无码在线免费观看网站不卡|