新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > stm32學習之四

        stm32學習之四

        作者: 時間:2016-12-03 來源:網絡 收藏
        systick(滴答定時器):

        系統的滴答定時器可以測試的例子是,將開發板上的LED等輪流點亮即可(我選擇的是1s輪流點亮三個LED等)。
        首先,系統滴答定時器的特點是,設置開啟定時器的話,會自動計數,這個時候,計數到0的時候,會觸發中斷。
        可以設置一個靜態的變量,全局進行計數,從而延時。

        步驟:
        1、建立一個SysTick.h文件,代碼如下:
        #ifndef _SYSTICK_H
        #define _SYSTICK_H

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

        #include "stm32f10x.h"
        void SysTick_Init(void);

        //void timeDecrement(void);

        void delay(__IO uint32_t count);

        #endif
        2、建立一個SysTick.c文件,代碼如下:
        #include "SysTick.h"
        static __IO uint32_t timeCount;

        void SysTick_Init(void)
        {
        if(SysTick_Config(SystemCoreClock/1000))//配置1ms的中斷
        {
        while(1);
        }
        SysTick->CTRL &= ~SysTick_CTRL_ENABLE_Msk;
        }

        void delay(__IO uint32_t count)
        {
        timeCount = count;
        SysTick->CTRL |= SysTick_CTRL_ENABLE_Msk;
        while(timeCount!=0);
        }

        void timeDecrement(void)
        {
        if(timeCount!=0x00)
        {
        timeCount--;
        }
        }

        3、中斷產生后,會執行stm32f10x_it.c文件:
        會自動執行這個函數:
        SysTick_Handler()
        那么在函數內部進行處理函數:
        void SysTick_Handler(void)
        {
        timeDecrement();
        }

        4、LED的操作不變:
        led.c文件:
        #include "led.h"
        void LED_GPIO_Config(void)
        {
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

        GPIO_Init(GPIOC,&GPIO_InitStructure);

        GPIO_SetBits(GPIOC,GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5);
        }
        led.h文件:
        #ifndef _LED_H
        #define _LED_H
        #include "stm32f10x.h"

        #define ON 1
        #define OFF 0

        #define LED1(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_3);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_3)
        #define LED2(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_4);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_4)
        #define LED3(a) if (a)
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);
        else
        GPIO_SetBits(GPIOC,GPIO_Pin_5)
        void LED_GPIO_Config(void);


        #endif

        主函數如下:
        /******************** (C) COPYRIGHT 2013**************************
        * 文件名 :main.c
        * 描述 :用3.5.0版本建的工程模板。
        * 實驗平臺:野火STM32開發板
        * 庫版本 :ST3.5.0
        *
        * 作者 :wit_yuan
        * 版本 : v1.0
        * 時間 : 2013年4月27日
        **********************************************************************************/
        #include "stm32f10x.h"
        #include "led.h"
        #include "SysTick.h"

        /*
        * 函數名:main
        * 描述 : 主函數
        * 輸入 :無
        * 輸出 : 無
        */
        int main(void)
        {
        LED_GPIO_Config();
        SysTick_Init();
        while(1)
        {
        LED1(ON);
        delay(1000);
        LED1(OFF);
        delay(1000);
        LED2(ON);
        delay(1000);
        LED2(OFF);
        delay(1000);
        LED3(ON);
        delay(1000);
        LED3(OFF);
        delay(1000);


        }

        }

        整個實驗過程完畢。



        關鍵詞: STM32systic

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 彭水| 广元市| 诸城市| 巴里| 岐山县| 荔波县| 莆田市| 临潭县| 沁水县| 阜南县| 南阳市| 治县。| 昆明市| 德阳市| 达州市| 独山县| 华坪县| 罗定市| 浦北县| 宜章县| 丹阳市| 海兴县| 永仁县| 卢氏县| 茶陵县| 乌兰浩特市| 黑龙江省| 红原县| 玉林市| 鲜城| 保康县| 和硕县| 张家港市| 武胜县| 阜平县| 南京市| 马龙县| 高雄市| 山阴县| 讷河市| 广饶县|