新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > STM32學習筆記——系統定時器SysTick的使用

        STM32學習筆記——系統定時器SysTick的使用

        作者: 時間:2016-11-28 來源:網絡 收藏
        //Cortex系統定時器SysTick提供1個24位、降序、零約束、寫清除的計數器,具有靈活的控制機制

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

        #include"stm32f10x_lib.h"

        GPIO_InitTypeDefGPIO_InitStructure;//定義用于初始化配置GPIO的結構體變量

        staticvu32TimingDelay;//定義為volatile類型

        ErrorStatusHSEStartUpStatus;//定義枚舉類型的錯誤狀態

        voidTimingDelay_Decrement(void);

        voidRCC_Configuration(void);

        voidNVIC_Configuration(void);

        voidDelay(vu32nTime);

        intmain(void)

        {

        #ifdefDEBUG

        debug();

        #endif

        RCC_Configuration();//系統時鐘配置

        NVIC_Configuration();//NVIC配置

        //系統默認SysTick是8分頻(HCLK/8)當前系統時鐘72M的話72/8=9MHZ

        SysTick_SetReload(9000);//如果設置9000時,計數到9000時,產生1MS中斷

        //該函數設置SysTick的重裝載值,因為是一個24位的計數器,所以重裝載值必須在1到0x00ffffff之間

        //開啟SysTick中斷

        SysTick_ITConfig(ENABLE);//使能或者失能SysTick中斷,參數取值有ENABEL或DISABEL

        //開啟GPIOB端口使能APB2

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);

        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9;//選中第6,7,8,9腳

        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//GPIO速度為50MHz

        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//設為推挽輸出模式

        GPIO_Init(GPIOB,&GPIO_InitStructure);//用配置好的結構體初始化PB口

        GPIO_Write(GPIOB,GPIO_Pin_6|GPIO_Pin_8);//向GPIOB的6,8腳寫數據

        while(1)

        {

        GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));//GPIOB口狀態取反

        Delay(500);//延時500MS

        GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));

        Delay(500);//延時500MS

        }

        }

        voidRCC_Configuration(void)

        {

        //復位RCC外部設備寄存器到默認值

        RCC_DeInit();

        //打開外部高速晶振

        RCC_HSEConfig(RCC_HSE_ON);

        //等待外部高速時鐘準備好

        HSEStartUpStatus=RCC_WaitForHSEStartUp();

        //外部高速時鐘已經準別好

        if(HSEStartUpStatus==SUCCESS)

        {

        FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

        FLASH_SetLatency(FLASH_Latency_2);

        //配置AHB(HCLK)時鐘=SYSCLK

        RCC_HCLKConfig(RCC_SYSCLK_Div1);

        //配置APB2(PCLK2)鐘=AHB時鐘

        RCC_PCLK2Config(RCC_HCLK_Div1);

        //配置APB1(PCLK1)鐘=AHB1/2時鐘

        RCC_PCLK1Config(RCC_HCLK_Div2);

        //配置ADC時鐘=PCLK21/4

        RCC_ADCCLKConfig(RCC_PCLK2_Div4);

        //配置PLL時鐘==外部高速晶體時鐘*9

        RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);//PLL頻率為8*9=72MHz


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 乌什县| 广饶县| 青龙| 吉林市| 嵊州市| 南投市| 连江县| 阜康市| 明溪县| 黔江区| 亚东县| 保定市| 梅河口市| 弋阳县| 宿迁市| 富民县| 右玉县| 东城区| 和政县| 潮安县| 大足县| 扶沟县| 绍兴县| 滦平县| 雅江县| 苏尼特右旗| 长顺县| 沈阳市| 泾阳县| 马鞍山市| 普兰县| 木兰县| 龙岩市| 工布江达县| 丽水市| 湛江市| 凤庆县| 加查县| 波密县| 临漳县| 台南县|