新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32在系統時鐘為72M下的幾個延時函數

        STM32在系統時鐘為72M下的幾個延時函數

        作者: 時間:2016-11-21 來源:網絡 收藏
        //粗延時函數,微秒
        • void delay_nus(u16 time)
        • {
        • u16 i=0;
        • while(time--)
        • {
        • i=10;//自己定義
        • while(i--) ;
        • }
        • }
        //毫秒級的延時
        • void delay_nms(u16 time)
        • {
        • u16 i=0;
        • while(time--)
        • {
        • i=12000;//自己定義
        • while(i--) ;
        • }
        • }
        運用SysTick來實現準確定時:

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

        • SysTick_Config(SystemCoreClock/ 10)函數的形參就是systick重裝定時器的值。
        • systick計數頻率為每秒72000000次,所以7200000次就是1/10秒,也就是100ms。
        • SysTick是1個24bit遞減計數器,通過對SysTick控制與狀態寄存器的設置,可選擇HCLK時鐘(72M)或HCLK的8分頻作為SysTick的時鐘源。//V3.5默認為HCLK時鐘
        • SysTick的重裝寄存器決定了定時器頻率。
        • 若SysTick的時鐘源是72M,SystemFrequency = 72000000Hz
        • 所以 SysTick_Config(SystemCoreClock/ 1000); 就是1ms時基。

        SysTick的初始化設置:voidInit_SysTick(void){if(SysTick_Config(SystemCoreClock/1000))//注意:3.5庫中SystemFrequency 被SystemCoreClock 取代。while(1);}延時函數:__IOuint32_tTimingDelay;voiddelay_ms(__IOuint32_tnTime){TimingDelay=nTime;while(TimingDelay!=0);}中斷函數:extern__IOuint32_tTimingDelay;voidSysTick_Handler(void){if(TimingDelay!=0x00){TimingDelay--;}}delay_ms(1000); 


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大同市| 鹿邑县| 肇东市| 陇川县| 鄯善县| 吉首市| 乐亭县| 宣汉县| 庄河市| 常德市| 中西区| 界首市| 眉山市| 惠水县| 澳门| 西华县| 红河县| 新和县| 张北县| 阜平县| 丁青县| 西华县| 丰城市| 巍山| 江口县| 龙岩市| 额尔古纳市| 当涂县| 呼和浩特市| 松桃| 宜宾县| 葫芦岛市| 湄潭县| 昌黎县| 九江市| 都昌县| 五指山市| 湾仔区| 文化| 西丰县| 东乡县|