<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于stm32的精確延時利用系統(tǒng)滴答systick

          基于stm32的精確延時利用系統(tǒng)滴答systick

          作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏
          利用系統(tǒng)滴答定時器來實現(xiàn)精確延時,需要以下五步:

          1、設置滴答定時器的時鐘,通過設置其控制寄存器,選擇外部時鐘,即為系統(tǒng)時鐘的八分之一,若系統(tǒng)時鐘為72M,則滴答定時器時鐘為9M。即定時一秒需要9M個時鐘周期。

          本文引用地址:http://www.ex-cimer.com/article/201611/322267.htm

          2、設置滴答定時器的重裝載寄存器的數(shù)值,即需要延時的時鐘周期數(shù)。如:若需要延時20微秒,則重裝載值為20*9.若要延時20毫秒,則設置重裝載值為20*9000.

          3、清空滴答定時器當前值寄存器的值,使之為零,以便使能計數(shù)時能夠從設定值開始倒數(shù)計時。

          4、設置滴答定時器的控制寄存器,開始倒計數(shù)。

          5、查詢滴答定時器的狀態(tài)位,定時時間到,關閉定時器,清空定時器當前值。

          void delay_init(u8 SYSCLK)

          {

          SysTick->CTRL&=0xfffffffb;//控制寄存器,選擇外部時鐘即系統(tǒng)時鐘的八分之一(HCLK/8;72M/8=9M)

          fac_us=SYSCLK/8; //定義全局變量,即延時一微秒所需的的時鐘周期數(shù)(72/8=9,單位為微妙)

          fac_ms=(u16)fac_us*1000; //一毫秒所需的時鐘周期數(shù)(9000)

          }

          void Delay_us(u32 nus)

          {

          u32 temp;

          SysTick->LOAD=nus*fac_us; //時間加載(即延時多少個時鐘周期)

          SysTick->VAL=0x00; //清空計數(shù)器

          SysTick->CTRL=0x01 ; //開始倒數(shù)

          do

          {

          temp=SysTick->CTRL;

          }

          while(temp&0x01&&!(temp&(1<<16)));//等待時間到達

          SysTick->CTRL=0x00; //關閉計數(shù)器

          SysTick->VAL =0X00; //清空計數(shù)器

          }

          或者

          void Delay_us(u32 Nus)

          {

          SysTick->LOAD=Nus*9; //時間加載 72M主頻

          SysTick->CTRL|=0x01; //開始倒數(shù)

          while(!(SysTick->CTRL&(1<<16))); //等待時間到達

          SysTick->CTRL=0X00000000; //關閉計數(shù)器

          SysTick->VAL=0X00000000; //清空計數(shù)器

          }



          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();