新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32--SYSTICK超簡易定時器

        STM32--SYSTICK超簡易定時器

        作者: 時間:2016-12-03 來源:網絡 收藏
        上次的 定時器搞得我比較暈,勉強調通了程序,就實用主義來說應該算是勉強合格了。

        當然CORTEX-M3獨有的定時功能可是超級簡單的 那就是SySTick,所謂的系統定時器.配置方式簡單
        簡單的不能再簡單,因為STM32 的庫函數已經幫我們搞好了,只需要調用一個函數,就可以配
        置系統時鐘的頻率和開啟系統時鐘的中斷.呵呵....不過這么好用的定時器只有一個。

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

        //SYSTICK 分頻--1ms的系統時鐘中斷
        if (SysTick_Config(SystemFrequency / 1000))
        {
        /* Capture error */
        while (1);
        }
        就是這么簡單,系統就會產生一個1MS 的系統時鐘中斷(如果除數是500,那么當然地就是
        2MS的中斷了).中斷函數是:
        void SysTick_Handler(void);


        這個函數將以每1MS 就會運行一次,而且進入中斷后不需要清除任何標志位,特省時間.而且
        還有點要說明的,SysTick是24 位倒計時的.設置的定時值最大就是2 的24 次方個系統時鐘
        ---已經很大了.

        直接 SysTick_Config(SystemFrequency / 1000); 也行。

        /***********************************************

        const uint32_t SystemFrequency = SYSCLK_FREQ_72MHz;

        #define SYSCLK_FREQ_72MHz 72000000

        ************************************************/

        /*******************************************************************************
        * Function Name : SysTickHandler
        * Description :系統時鐘,一般調教到1MS中斷一次
        *******************************************************************************/

        void SysTick_Handler(void)
        {
        if(Timer1)
        Timer1--;
        }

        /********************************************
        **函數名:SysTickDelay
        **功能:使用系統時鐘的硬延遲
        **注意事項:一般地,不要在中斷中調用本函數,否則會存在重入問題.另外如果屏蔽了全局中斷,則不要使用此函數
        ********************************************/
        volatile u16 Timer1;
        void SysTickDelay(u16 dly_ms)
        {
        Timer1=dly_ms;
        while(Timer1);
        }

        /**********************************************************************************

        3.0的庫相對2.0來說貌似刪減了部分內容


        /**
        * @brief Configures the SysTick clock source.
        * @param SysTick_CLKSource: specifies the SysTick clock source.
        * This parameter can be one of the following values:
        * @arg SysTick_CLKSource_HCLK_Div8: AHB clock divided by 8
        * selected as SysTick clock source.
        * @arg SysTick_CLKSource_HCLK: AHB clock selected as
        * SysTick clock source.
        * @retval : None
        */
        void SysTick_CLKSourceConfig(uint32_t SysTick_CLKSource)
        {
        /* Check the parameters */
        assert_param(IS_SYSTICK_CLK_SOURCE(SysTick_CLKSource));
        if (SysTick_CLKSource == SysTick_CLKSource_HCLK)
        {
        SysTick->CTRL |= SysTick_CLKSource_HCLK;
        }
        else
        {
        SysTick->CTRL &= SysTick_CLKSource_HCLK_Div8;
        }
        }



        關鍵詞: STM32SysTick定時

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安徽省| 琼结县| 金昌市| 泉州市| 梅州市| 祁阳县| 克什克腾旗| 苍梧县| 藁城市| 孟津县| 页游| 平度市| 沙洋县| 林周县| 龙里县| 谢通门县| 保亭| 柳林县| 威宁| 遂宁市| 余庆县| 安仁县| 南汇区| 高碑店市| 西吉县| 从江县| 永安市| 收藏| 南部县| 庄河市| 屏东县| 开封县| 潞西市| 乾安县| 宾阳县| 玛纳斯县| 苍山县| 绥德县| 刚察县| 锡林浩特市| 什邡市|