在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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>

            新聞中心

            STM32時(shí)鐘設(shè)置

            作者: 時(shí)間:2016-11-28 來(lái)源:網(wǎng)絡(luò) 收藏
            3.5的庫(kù)中什么也不用做。已經(jīng)在啟動(dòng)文件中設(shè)置好了時(shí)鐘。

            大家都知道在使用單片機(jī)時(shí),時(shí)鐘速度決定于外部晶振或內(nèi)部RC振蕩電路的頻率,是不可以改變的。而ARM的出現(xiàn)打破了這一傳統(tǒng)的法則,可以通過(guò)軟件隨意改變時(shí)鐘速度。這一出現(xiàn)讓我們的設(shè)計(jì)更加靈活,但是也給我們的設(shè)計(jì)增加了復(fù)雜性。為了讓用戶能夠更簡(jiǎn)單的使用這一功能,STM32的庫(kù)函數(shù)已經(jīng)為我們?cè)O(shè)計(jì)的更加簡(jiǎn)單方便。

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

            在比較靠前的版本中,我們需要向下面那樣設(shè)置時(shí)鐘:

            ErrorStatus HSEStartUpStatus;


            void RCC_Configuration(void)
            {
            RCC_DeInit(); // RCC system reset(for debug purpose)

            RCC_HSEConfig(RCC_HSE_ON);// Enable HSE

            HSEStartUpStatus = RCC_WaitForHSEStartUp();// Wait till HSE is ready

            if (HSEStartUpStatus == SUCCESS)// 當(dāng)HSE準(zhǔn)備完畢切振蕩穩(wěn)定后
            {
            RCC_HCLKConfig(RCC_SYSCLK_Div1); // HCLK = SYSCLK
            RCC_PCLK2Config(RCC_HCLK_Div1); // PCLK2 = HCLK
            RCC_PCLK1Config(RCC_HCLK_Div2);// PCLK1 = HCLK/2
            FLASH_SetLatency(FLASH_Latency_2);// Flash 2 wait state
            FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);// Enable Prefetch Buffer
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);// PLLCLK = 8MHz * 9 = 72 MHz
            RCC_PLLCmd(ENABLE);// Enable PLL
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
            {;// Wait till PLL is ready
            }
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);// Select PLL as system clock source
            while (RCC_GetSYSCLKSource() != 0x08)// Wait till PLL is used as system clock source
            {
            ;
            }
            }
            }

            隨之函數(shù)庫(kù)的不斷升級(jí),到3.0以上時(shí),我們就不用再這樣編寫時(shí)鐘設(shè)置了,我們只要做如下兩部即可:

            第一個(gè): system_stm32f10x.c 中#define SYSCLK_FREQ_72MHz 72000000
            第二個(gè):調(diào)用SystemInit()

            說(shuō)明:在stm32固件庫(kù)3.0中對(duì)時(shí)鐘頻率的選擇進(jìn)行了大大的簡(jiǎn)化,原先的一大堆操作都在后臺(tái)進(jìn)行。系統(tǒng)給出的函數(shù)為SystemInit()。但在調(diào)用前還需要進(jìn)行一些宏定義的設(shè)置,具體的設(shè)置在system_stm32f10x.c文件中。

            文件開(kāi)頭就有一個(gè)這樣的定義:
            //#define SYSCLK_FREQ_HSEHSE_Value
            //#define SYSCLK_FREQ_20MHz 20000000
            //#define SYSCLK_FREQ_36MHz 36000000
            //#define SYSCLK_FREQ_48MHz 48000000
            //#define SYSCLK_FREQ_56MHz 56000000
            #define SYSCLK_FREQ_72MHz 72000000

            ST 官方推薦的外接晶振是 8M,所以庫(kù)函數(shù)的設(shè)置都是假定你的硬件已經(jīng)接了 8M 晶振來(lái)運(yùn)算的.以上東西就是默認(rèn)晶振 8M 的時(shí)候,推薦的 CPU 頻率選擇.在這里選擇了:
            #define SYSCLK_FREQ_72MHz 72000000
            也就是103系列能跑到的最大值72M

            然后這個(gè) C文件繼續(xù)往下看
            #elif defined SYSCLK_FREQ_72MHz
            const uint32_t SystemFrequency= SYSCLK_FREQ_72MHz;
            const uint32_t SystemFrequency_SysClk= SYSCLK_FREQ_72MHz;
            const uint32_t SystemFrequency_AHBClk= SYSCLK_FREQ_72MHz;
            const uint32_t SystemFrequency_APB1Clk= (SYSCLK_FREQ_72MHz/2);
            const uint32_t SystemFrequency_APB2Clk= SYSCLK_FREQ_72MHz;

            這就是在定義了CPU跑72M的時(shí)候,各個(gè)系統(tǒng)的速度了.他們分別是:硬件頻率,系統(tǒng)時(shí)鐘,AHB總線頻率,APB1總線頻率,APB2總線頻率.再往下看,看到這個(gè)了:
            #elif defined SYSCLK_FREQ_72MHz
            static void SetSysClockTo72(void);

            這就是定義 72M 的時(shí)候,設(shè)置時(shí)鐘的函數(shù).這個(gè)函數(shù)被 SetSysClock ()函數(shù)調(diào)用,而SetSysClock ()函數(shù)則是被 SystemInit()函數(shù)調(diào)用.最后 SystemInit()函數(shù),就是被你調(diào)用的了。

            所以設(shè)置系統(tǒng)時(shí)鐘的流程就是: 首先用戶程序調(diào)用 SystemInit()函數(shù),這是一個(gè)庫(kù)函數(shù),然后 SystemInit()函數(shù)里面,進(jìn)行了一些寄存器必要的初始化后,就調(diào)用 SetSysClock()函數(shù). SetSysClock()函數(shù)根據(jù)那個(gè)#define SYSCLK_FREQ_72MHz 72000000 的宏定義,知道了要調(diào)用SetSysClockTo72()這個(gè)函數(shù),于是,就一堆麻煩而復(fù)雜的設(shè)置~!@#$%^然后,CPU跑起來(lái)了,而且速度是 72M.




            關(guān)鍵詞: STM32時(shí)鐘設(shè)

            評(píng)論


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

            關(guān)閉