<dl id="xausj"></dl>
    1. <ul id="xausj"><th id="xausj"></th></ul>

      <b id="xausj"></b>
      <cite id="xausj"></cite>
      <b id="xausj"><meter id="xausj"></meter></b>
      <dl id="xausj"><noframes id="xausj"></noframes></dl>
    2. 您好,歡迎訪問上海意泓電子科技有限責(zé)任公司網(wǎng)站!
      4新聞資訊
      您的位置: 首頁 ->  新聞資訊 -> 單片機(jī)

      ?STM32中通過普通延時(shí)函數(shù)來精確延時(shí)

      文章出處:單片機(jī) 責(zé)任編輯:上海意泓電子科技有限責(zé)任公司 發(fā)表時(shí)間:
      2020
      11-10

      在STM32中處處會(huì)用到延時(shí)函數(shù),一般而言,對(duì)于普通的控制延時(shí),并不會(huì)要求特別精確,所以可以使用普通的延時(shí)函數(shù),例如


      void delay(u32 time)  

      {  

        while(time--);  

      }  

       但是在某些情況下,例如讀取傳感器數(shù)據(jù),就需要精確的延時(shí),對(duì)于這種,這時(shí)候可以考慮使用軟件定時(shí)器或者系統(tǒng)定時(shí)器進(jìn)行精確定時(shí)延時(shí)。在這篇博文中不在詳細(xì)對(duì)這兩種進(jìn)行描述。

      本文主要是針對(duì)某些情況下,使用系統(tǒng)滴答定時(shí)器或者軟件定時(shí)器對(duì)工程造成阻塞影響或者定時(shí)器用作其他用途,不夠使用的情況下的另一種解決方法。


      因此本文主要是解決通過普通延時(shí)函數(shù)實(shí)現(xiàn)精確的定時(shí)。

      博主測(cè)試的開發(fā)板芯片是STM32f103c8t6,外部晶振是8M,系統(tǒng)使用經(jīng)過倍頻至72M,編譯器選擇的Keil5,使用的是庫函數(shù)開發(fā)。通過普通延時(shí)函數(shù)來實(shí)現(xiàn)讀取溫濕度傳感器DHT11的數(shù)據(jù),由于使用的freeRTOS操作系統(tǒng),同時(shí)各個(gè)軟件定時(shí)器用作其他用途。。。理由不再贅述。


      剛開始,通過使用__NOP()函數(shù),因?yàn)槭褂昧?M晶振9倍頻,72MHz,所以一個(gè)nop約等于1/72us,所以使用72個(gè)nop函數(shù)為一個(gè)us,然后根據(jù)需要的定時(shí)時(shí)間進(jìn)行計(jì)算。


      void delay_us(u32 nTimer)  

      {  

          u32 i=0;  

          for(i=0;i

              __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  

              __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  

              __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  

              __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  

              __NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();__NOP();  

          }  

      }  


      void delay_ms(u32 nTimer)  

      {  

          u32 i=1000*nTimer;  

          delay_us(i);  

      }  


      之后通過測(cè)試讀取傳感器數(shù)據(jù),得到了數(shù)據(jù),證明該延時(shí)函數(shù)相對(duì)比較準(zhǔn)確,但是由于博主身邊并沒有邏輯分析儀或示波器,所以不能對(duì)其延時(shí)時(shí)間進(jìn)行精確測(cè)試。

      第二種延時(shí)方法是在電子發(fā)燒友論壇看到版主通過邏輯分析儀對(duì)另一種普通延時(shí)進(jìn)行的精確測(cè)試。同樣可以實(shí)現(xiàn)讀取數(shù)據(jù)。具體延時(shí)函數(shù)如下所示:


      void delay_us(u32 time)  

      {  

        u32 i=8*time;  

        while(i--);  

      }  

      void delay_ms(u32 time)  

      {  

        u32 i=8000*time;  

        while(i--);  

      }  

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

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

      国产中文欧美日韩,色播在线永久免费视频,另类专区亚洲无码,亚洲中文字无码av

      <dl id="xausj"></dl>
      1. <ul id="xausj"><th id="xausj"></th></ul>

        <b id="xausj"></b>
        <cite id="xausj"></cite>
        <b id="xausj"><meter id="xausj"></meter></b>
        <dl id="xausj"><noframes id="xausj"></noframes></dl>