久久人妻精品人妻视频五月天一区二区三区,,自慰午夜喷水久久久av国产成人a视频高在线,,欧美日韩免费专区在线97精品国产手机

  • <cite id="cwywg"></cite>
    <button id="cwywg"></button>
  • <button id="cwywg"><source id="cwywg"></source></button>
    <button id="cwywg"><tbody id="cwywg"></tbody></button>
  • <button id="cwywg"></button>
  • 
    
  • logo logo
    • BANNER
    • BANNER
    • BANNER
    您的位置 : 首頁(yè) > 新聞資訊 > 技術(shù)支持
    STM32中通過(guò)普通延時(shí)函數(shù)來(lái)精確延時(shí)
    發(fā)布者:江蘇瑞易通電子科技有限公司 人氣:735 發(fā)布日期:2021-04-23 10:10:40

    在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í)器用作其他用途,不夠使用的情況下的另一種解決方法。


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

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


    剛開(kāi)始,通過(guò)使用__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);  

    }  


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

    第二種延時(shí)方法是在電子發(fā)燒友論壇看到版主通過(guò)邏輯分析儀對(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--);  

    }  

    返回新聞列表