新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32 延時函數封裝

        STM32 延時函數封裝

        作者: 時間:2012-09-10 來源:網絡 收藏

        /*---------------------------------

        本文引用地址:http://www.104case.com/article/148436.htm

        模塊

        說明:只需在工程中加入delay.c和delay.h

        文件,即可用 Delayms(__IO uint32_t nTime);

        Delayus(__IO uint32_t nTime)

        -----------------------------------*/

        #ifndef __DELAY_H

        #define __DELAY_H

        #include stm32f10x.h

        /*---------------------------------

        描 述:參數1即為1ms,1000即為1s;只有幾

        us的誤差;

        -----------------------------------*/

        extern void Delayms(__IO uint32_t nTime);

        /*---------------------------------

        描 述:參數1即為1us,1000即為1ms;只有幾

        us的誤差;

        -----------------------------------*/

        extern void Delayus(__IO uint32_t nTime);

        /*---------------------------------

        名:調整形式的delaynus,

        描 述:參數1即為1us,1000即為1ms;

        -----------------------------------*/

        extern void delay_nus(unsigned long n);

        /*---------------------------------

        函數名:調整形式的delaynms函數,

        描 述:參數1即為1ms,1000即為1s;

        -----------------------------------*/

        extern void delay_nms(unsigned long n);

        #endif

        C 函數

        /*---------------------------------

        延時模塊函數

        說明:只需在工程中加入delay.c和delay.h

        文件,即可用 Delayms(__IO uint32_t nTime);

        Delayus(__IO uint32_t nTime)

        -----------------------------------*/

        #includedelay.h

        static __IO uint32_t TimingDelay;

        /* Private function prototypes -----------------------------------------------*/

        /*---------------------------------

        函數名:ms延時函數

        描 述:參數1即為1ms,1000即為1s;只有幾

        us的誤差;

        -----------------------------------*/

        void Delayms(__IO uint32_t nTime)

        {

        while(SysTick_Config(SystemCoreClock/1000));

        TimingDelay = nTime;

        while(TimingDelay != 0);

        SysTick->CTRL=0x00; //關閉計數器

        SysTick->VAL =0X00; //清空計數器

        }

        /*---------------------------------

        函數名:us延時函數

        描 述:參數1即為1us,1000即為1ms;只有幾

        us的誤差;

        -----------------------------------*/

        void Delayus(__IO uint32_t nTime)

        {

        while(SysTick_Config(SystemCoreClock/1000000));

        TimingDelay = nTime;

        while(TimingDelay != 0);

        SysTick->CTRL=0x00; //關閉計數器

        SysTick->VAL =0X00; //清空計數器

        }

        /*---------------------------------

        函數名:延時輔助函數

        描 述:

        -----------------------------------*/

        void TimingDelay_Decrement(void)

        {

        if (TimingDelay != 0x00)

        {

        TimingDelay--;

        }

        }

        /*---------------------------------

        函數名:systick的中斷函數

        描 述:參數1即為1us,1000即為1ms;只有幾

        us的誤差;

        -----------------------------------*/

        void SysTick_Handler(void)

        {

        TimingDelay_Decrement();

        }

        /*---------------------------------

        函數名:延時調整形式的delaynus函數,

        描 述:參數1即為1us,1000即為1ms;

        -----------------------------------*/

        void delay_nus(unsigned long n)

        {

        unsigned long j;

        while(n--)

        {

        j=12;

        while(j--);

        }

        }

        /*---------------------------------

        函數名:延時調整形式的delaynms函數,

        描 述:參數1即為1ms,1000即為1s;

        -----------------------------------*/

        void delay_nms(unsigned long n)

        {

        while(n--)

        delay_nus(1030);

        }



        關鍵詞: 封裝 函數 延時 STM32

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 墨玉县| 南涧| 定兴县| 宁武县| 普兰店市| 三河市| 南召县| 南开区| 平乐县| 丹棱县| 叶城县| 锡林浩特市| 揭西县| 西昌市| 剑川县| 沙雅县| 新竹市| 白水县| 屯留县| 普安县| 随州市| 云和县| 准格尔旗| 和林格尔县| 霸州市| 巴南区| 平顺县| 梁河县| 乌海市| 临武县| 阿拉善右旗| 保山市| 乌拉特前旗| 澄江县| 霍城县| 兴化市| 永新县| 汉寿县| 石阡县| 平乐县| 茂名市|