新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32筆記之十二:時鐘不息工作不止,systic時鐘應用

        STM32筆記之十二:時鐘不息工作不止,systic時鐘應用

        作者: 時間:2016-11-26 來源:網絡 收藏
        a)目的:使用系統時鐘來進行兩項實驗——周期執行代碼與精確定時延遲。

        b)初始化函數定義:

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

        void SysTick_Configuration(void);

        c)初始化函數調用:

        SysTick_Configuration();

        d)初始化函數:

        void SysTick_Configuration(void)

        {

        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8);//時鐘除8

        SysTick_SetReload(250000);//計數周期長度

        SysTick_CounterCmd(SysTick_Counter_Enable);//啟動計時器

        SysTick_ITConfig(ENABLE);//打開中斷

        }

        e)在NVIC的初始化函數里面增加以下代碼打開相關中斷:

        NVIC_SystemHandlerPriorityConfig(SystemHandler_SysTick, 1, 0);//中斷等級設置,一般設置的高一些會少受其他影響

        f)在stm32f10x_it.c文件中找到void SysTickHandler函數

        void SysTickHandler(void)

        {

        執行代碼

        }

        g)簡單應用:精確延遲函數,因為systic中斷往往被用來執行周期循環代碼,所以一些例程中使用其中斷的啟動和禁止來編寫的精確延時函數實際上不實用,我自己編寫了精確計時函數反而代碼更精簡,思路更簡單。思路是調用后,變量清零,然后使用時鐘來的曾變量,不斷比較變量與延遲的數值,相等則退出函數。代碼和步驟如下:

        i.定義通用變量:u16 Tic_Val=0; //變量用于精確計時

        ii.在stm32f10x_it.c文件中相應定義:

        extern u16 Tic_Val;//在本文件引用MAIN.c定義的精確計時變量

        iii.定義函數名稱:void Tic_Delay(u16 Tic_Count);//精確延遲函數

        iv.精確延時函數:

        void Tic_Delay(u16 Tic_Count)//精確延時函數

        {Tic_Val=0;//變量清零

        while(Tic_Val != Tic_Count){printf("");}//計時

        }

        v.在stm32f10x_it.c文件中void SysTickHandler函數里面添加

        Tic_Val++;//變量遞增

        vi.調用代碼:Tic_Delay(10);//精確延時

        vii.疑問:如果去掉計時行那個沒用的printf("");函數將停止工作,這個現象很奇怪


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丰台区| 边坝县| 安达市| 惠州市| 盱眙县| 竹山县| 巴楚县| 隆回县| 镇康县| 柳河县| 舟山市| 济源市| 浦北县| 武夷山市| 普宁市| 驻马店市| 新安县| 漳浦县| 鸡泽县| 社会| 新龙县| 尉氏县| 航空| 临武县| 澎湖县| 施甸县| 万安县| 宁蒗| 桂阳县| 桦甸市| 雅安市| 枣强县| 揭东县| 隆德县| 鹤岗市| 沐川县| 马关县| 平安县| 沿河| 新闻| 西乌|