在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > stm32快速學(xué)習(xí)6——SysTick 定時(shí)1s控制LED

            stm32快速學(xué)習(xí)6——SysTick 定時(shí)1s控制LED

            作者: 時(shí)間:2016-11-17 來(lái)源:網(wǎng)絡(luò) 收藏
            設(shè)置使用外部8M晶振

            設(shè)置引腳功能

            本文引用地址:http://www.biyoush.com/article/201611/315447.htm

            設(shè)置systick為1s中斷

            利用systick中斷就可以得到1s時(shí)間

            //////////////////////////////////////////////////////////////////////////前言/////////////////////////////////////////////////////////////////////////////////////////

            stm32的systick通過(guò)少數(shù)的程序設(shè)置,當(dāng)使用systick_config()函數(shù)之后,其載入值就是你的參數(shù),并且自動(dòng)打開(kāi)中斷,并將中斷設(shè)為最低的優(yōu)先級(jí),將其時(shí)鐘設(shè)為HCLK即系統(tǒng)時(shí)鐘72mhz,并重置計(jì)數(shù)寄存器開(kāi)始計(jì)數(shù)。也可以將時(shí)鐘設(shè)置為HCKL的八分頻,通過(guò)使用SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8) 緊跟在systick_config()之后,而改變優(yōu)先級(jí)則使用NVIC_SetPriority(SysTick_IRQn,...) 函數(shù),而時(shí)基單元的設(shè)置使用如下公式,Reload Value = SysTick Counter Clock (Hz) x Desired Time base (s) Reload Value 就是傳遞進(jìn)去的參數(shù)。但參數(shù)不能超過(guò)0xFFFFFF。
            systick的時(shí)鐘,systick的時(shí)鐘包括內(nèi)部時(shí)鐘和外部時(shí)鐘,對(duì)于stm32 其內(nèi)部時(shí)鐘FCLK就是AHB的時(shí)鐘,72MHz,外部時(shí)鐘STCLK就是8分頻后的時(shí)鐘,9MHz。因此使用systick_config()函數(shù)時(shí)其默認(rèn)時(shí)鐘為72MHz。

            使用systick延時(shí)的時(shí)候也可以不開(kāi)啟中斷,而直接對(duì)其寄存器進(jìn)行讀寫

            SysTick_Config(uint32_tticks):設(shè)置系統(tǒng)嘀嗒時(shí)鐘并使能中斷

            STM32中與CM3內(nèi)核描述不太一樣,這個(gè)時(shí)鐘源有兩個(gè)選擇:AHB/8和AHB,在該函數(shù)中是選擇了HCLK.

            (SysTick_CTRL_CLKSOURCE_Msk),所以定時(shí)時(shí)間=ticks/HCLK,當(dāng)要定時(shí)10ms,而HCLK為24MHz時(shí),ticks=10000*24=240000。

            如果需要選擇HCLK/8,可以直接修改這個(gè)函數(shù),或在這個(gè)函數(shù)后跟隨misc中的SysTick_CLKSourceConfig(uint32_tSysTick_CLKSource)來(lái)設(shè)置

            ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

            這里使用3.4的庫(kù),注意是SystemCoreClock,3.0那些版本是用SystemFrequency這個(gè)單詞,其他2.x版本的方法是不同的。

            注: 全局變量 TimingDelay , 必須定義為 volatile 類型 , 延遲時(shí)間將不隨系統(tǒng)時(shí)鐘頻率改變。

            Main文件

            #include"stm32f10x.h"

            voidRCC_Configuration(void);

            voidGPIO_Configuration(void);

            voidSysTick_Configuration(void);

            voidDelay(volatileuint32_tnTime);

            staticvolatileuint32_tTimingDelay;

            intmain(void)

            {

            RCC_Configuration();

            GPIO_Configuration();

            SysTick_Configuration();

            while(1)

            {

            GPIO_SetBits(GPIOA,GPIO_Pin_0);

            Delay(1000);

            GPIO_SetBits(GPIOA,GPIO_Pin_1);

            Delay(1000);

            GPIO_ResetBits(GPIOA,GPIO_Pin_0);

            Delay(1000);

            GPIO_ResetBits(GPIOA,GPIO_Pin_1);

            Delay(1000);

            }

            }

            voidRCC_Configuration(void) /*使用外部8M*/

            {

            ErrorStatusHSEStartUpStatus;

            /*RCCsystemreset(fordebugpurpose)*/

            RCC_DeInit();

            /*EnableHSE*/

            RCC_HSEConfig(RCC_HSE_ON);

            /*WaittillHSEisready*/

            HSEStartUpStatus=RCC_WaitForHSEStartUp();

            if(HSEStartUpStatus==SUCCESS)

            {

            /*EnablePrefetchBuffer預(yù)取指緩存使能*/

            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

            /*Flash2waitstate,F(xiàn)LASH存儲(chǔ)器延時(shí)時(shí)鐘周期數(shù)*/

            FLASH_SetLatency(FLASH_Latency_2);

            /*HCLK=SYSCLK*/

            RCC_HCLKConfig(RCC_SYSCLK_Div1);

            /*PCLK2=HCLK*/

            RCC_PCLK2Config(RCC_HCLK_Div1);

            /*PCLK1=HCLK/2*/

            RCC_PCLK1Config(RCC_HCLK_Div2);

            /*PLLCLK=8MHz*9=72MHz*/

            RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);

            /*EnablePLL*/

            RCC_PLLCmd(ENABLE);

            /*WaittillPLLisready*/

            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)

            {

            }

            /*SelectPLLassystemclocksource*/

            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

            /*WaittillPLLisusedassystemclocksource*/

            while(RCC_GetSYSCLKSource()!=0x08)

            {

            }

            }

            /*EnableGPIOCclock*/

            RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);

            }

            voidGPIO_Configuration(void)

            {

            GPIO_InitTypeDefGPIO_InitStructure;

            GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;

            GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

            GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;

            GPIO_Init(GPIOA,&GPIO_InitStructure);

            }

            voidSysTick_Configuration()

            {

            if(SysTick_Config(SystemCoreClock/1000))

            {

            /*Captureerror*/

            while(1);

            }

            }

            voidDelay(volatileuint32_tnTime)

            {

            TimingDelay=nTime;

            while(TimingDelay!=0);

            }

            voidTimingDelay_Decrement(void)

            {

            if(TimingDelay!=0x00)

            {

            TimingDelay--;

            }

            }

            Stm32f10x_it.c加入

            voidTimingDelay_Decrement(void);

            voidSysTick_Handler(void)

            {

            TimingDelay_Decrement();

            }



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉