新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STM32 延時函數(shù)封裝

        STM32 延時函數(shù)封裝

        作者: 時間: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

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

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

        us的誤差;

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

        extern void Delayms(__IO uint32_t nTime);

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

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

        us的誤差;

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

        extern void Delayus(__IO uint32_t nTime);

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

        名:調整形式的delaynus,

        描 述:參數(shù)1即為1us,1000即為1ms;

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

        extern void delay_nus(unsigned long n);

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

        函數(shù)名:調整形式的delaynms函數(shù),

        描 述:參數(shù)1即為1ms,1000即為1s;

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

        extern void delay_nms(unsigned long n);

        #endif

        C 函數(shù)

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

        延時模塊函數(shù)

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

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

        Delayus(__IO uint32_t nTime)

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

        #includedelay.h

        static __IO uint32_t TimingDelay;

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

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

        函數(shù)名:ms延時函數(shù)

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

        us的誤差;

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

        void Delayms(__IO uint32_t nTime)

        {

        while(SysTick_Config(SystemCoreClock/1000));

        TimingDelay = nTime;

        while(TimingDelay != 0);

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

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

        }

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

        函數(shù)名:us延時函數(shù)

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

        us的誤差;

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

        void Delayus(__IO uint32_t nTime)

        {

        while(SysTick_Config(SystemCoreClock/1000000));

        TimingDelay = nTime;

        while(TimingDelay != 0);

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

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

        }

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

        函數(shù)名:延時輔助函數(shù)

        描 述:

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

        void TimingDelay_Decrement(void)

        {

        if (TimingDelay != 0x00)

        {

        TimingDelay--;

        }

        }

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

        函數(shù)名:systick的中斷函數(shù)

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

        us的誤差;

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

        void SysTick_Handler(void)

        {

        TimingDelay_Decrement();

        }

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

        函數(shù)名:延時調整形式的delaynus函數(shù),

        描 述:參數(shù)1即為1us,1000即為1ms;

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

        void delay_nus(unsigned long n)

        {

        unsigned long j;

        while(n--)

        {

        j=12;

        while(j--);

        }

        }

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

        函數(shù)名:延時調整形式的delaynms函數(shù),

        描 述:參數(shù)1即為1ms,1000即為1s;

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

        void delay_nms(unsigned long n)

        {

        while(n--)

        delay_nus(1030);

        }



        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 岗巴县| 南皮县| 遵化市| 娄烦县| 双牌县| 台前县| 通辽市| 易门县| 公主岭市| 涞水县| 庐江县| 榕江县| 吴桥县| 襄汾县| 东台市| 海门市| 方正县| 枣强县| 漾濞| 蓬安县| 潍坊市| 湖州市| 于田县| 内乡县| 清河县| 和静县| 崇仁县| 马边| 桂林市| 金秀| 高密市| 合作市| 安吉县| 靖远县| 三门峡市| 吴堡县| 屯门区| 河北区| 通许县| 驻马店市| 邵东县|