新聞中心

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

        STM32精確延時函數

        作者: 時間:2016-12-02 來源:網絡 收藏
        #include "stm32f10x_systick.h"
        //使用SysTick的普通計數模式對延遲進行管理
        //包括delay_us,delay_ms
        //修正了中斷中調用出現死循環的錯誤
        //防止延時不準確,采用do while結構!

        static u8 fac_us=0;//us延時倍乘數
        static u16 fac_ms=0;//ms延時倍乘數

        //初始化延遲函數
        void delay_init(u8 SYSCLK) // 系統時鐘是72M 即SYSCLK 取72 ,其他類推
        {
        SysTick->CTRL&=0xfffffffb;//選擇內部時鐘 HCLK/8
        // SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);
        fac_us=SYSCLK/8;
        fac_ms=(u16)fac_us*1000;
        }
        //延時Nms
        //注意Nms的范圍
        //Nms<=0xffffff*8/SYSCLK
        //對72M條件下,Nms<=1864
        void delay_ms(u16 nms)
        {
        u32 temp;
        SysTick->LOAD=(u32)nms*fac_ms;//時間加載
        //SysTick_SetReload((u32)nms*fac_ms);
        SysTick->VAL =0x00; //清空計數器
        //SysTick_CounterCmd(SysTick_Counter_Clear);
        SysTick->CTRL=0x01 ; //開始倒數
        //SysTick_CounterCmd(SysTick_Counter_Enable);
        do
        {
        temp=SysTick->CTRL;
        }
        while(temp&0x01&&!(temp&(1<<16)));//等待時間到達
        SysTick->CTRL=0x00; //關閉計數器
        SysTick->VAL =0x00; //清空計數器

        }



        關鍵詞: STM32精確延時函

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 虹口区| 临潭县| 太和县| 武强县| 上犹县| 绿春县| 来安县| 漯河市| 陵川县| 龙山县| 鲁甸县| 兴海县| 隆回县| 西平县| 桐柏县| 巨野县| 南京市| 罗平县| 凌云县| 博罗县| 南康市| 唐山市| 拉萨市| 南城县| 云南省| 灌云县| 化州市| 辉南县| 韶山市| 朝阳区| 济南市| 宣汉县| 沁水县| 远安县| 徐闻县| 嵩明县| 洛隆县| 南郑县| 葵青区| 景东| 西盟|