新聞中心

        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

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 丰镇市| 渝中区| 托里县| 喀喇沁旗| 肃北| 南岸区| 桂东县| 吉林市| 灵山县| 天柱县| 吐鲁番市| 安庆市| 泰安市| 皋兰县| 翁牛特旗| 韶关市| 营山县| 固原市| 四川省| 阜阳市| 枣强县| 咸阳市| 宜宾县| 柘荣县| 彰武县| 抚顺市| 什邡市| 榆树市| 得荣县| 林甸县| 炉霍县| 沈阳市| 茶陵县| 昭觉县| 阳高县| 遂昌县| 南陵县| 寿宁县| 东乡县| 资源县| 临潭县|