<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32學(xué)習(xí)筆記——RCC系統(tǒng)時(shí)鐘配置

          STM32學(xué)習(xí)筆記——RCC系統(tǒng)時(shí)鐘配置

          作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
          //學(xué)習(xí)RCC的配置方法,以后可以直接用

          本文引用地址:http://www.ex-cimer.com/article/201611/322895.htm

          #include"stm32f10x_lib.h"

          //#defineSYSCLK_HSE

          //#defineSYSCLK_FREQ_20MHz

          //#defineSYSCLK_FREQ_36MHz//36MH工作

          //#defineSYSCLK_FREQ_48MHz//48MH工作通過宏定義改變系統(tǒng)時(shí)鐘頻率

          #defineSYSCLK_FREQ_72MHz//工作72MH

          #defineDELAY_COUNT0xFFFFF

          GPIO_InitTypeDefGPIO_InitStructure;//定義GPIO配置的結(jié)構(gòu)體變量,用于初始化設(shè)置GPIO

          RCC_ClocksTypeDefRCC_ClockFreq;//定義RCC時(shí)鐘頻率配置的結(jié)構(gòu)體變量,用于配置RCC。包括SYSCLK,HCLK,PCLK1,PCLK2,ADCCLK頻率的設(shè)置

          ErrorStatusHSEStartUpStatus;//定義枚舉類型的錯(cuò)誤變量

          //設(shè)置系統(tǒng)時(shí)鐘SYSCLK的函數(shù)

          voidSetSysClock(void);

          voidSetSysClockToHSE(void);

          voidSetSysClockTo20(void);

          voidSetSysClockTo36(void);

          voidSetSysClockTo48(void);

          voidSetSysClockTo72(void);

          voidNVIC_Configuration(void);//配置嵌套向量中斷控制器函數(shù)

          voidDelay(vu32nCount);//延遲

          intmain(void)

          {

          #ifdefDEBUG

          debug();

          #endif

          SetSysClock();//設(shè)置系統(tǒng)時(shí)鐘HCLKPCLK2PCLK1

          RCC_GetClocksFreq(&RCC_ClockFreq);//獲得不同片上時(shí)鐘的頻率,RCC_ClockFreq為前面定義的時(shí)鐘頻率結(jié)構(gòu)體變量,該函數(shù)把當(dāng)前

          //不同片上時(shí)鐘的頻率存放在結(jié)構(gòu)體RCC_ClockFreq中

          RCC_ClockSecuritySystemCmd(ENABLE);//該函數(shù)使能或失能時(shí)鐘安全系統(tǒng)在這里是使能

          NVIC_Configuration();

          //開啟GPIOAGPIOB模塊時(shí)鐘使能APB2時(shí)鐘

          RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOA,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;//設(shè)置為推挽輸出模式

          GPIO_Init(GPIOB,&GPIO_InitStructure);//用剛剛配置好的結(jié)構(gòu)體變量初始化PB口

          GPIO_Write(GPIOB,GPIO_Pin_7|GPIO_Pin_9);//向GPIOB口寫入數(shù)據(jù)

          //MCO:微控制器時(shí)鐘輸出時(shí)鐘能夠輸出到外部的MCO管腳,相關(guān)的GPIO管腳必須被配置成備用功能模式即AF模式

          //在STM32F103C8中PA8為MCO管腳

          GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;//選擇第8腳

          GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//復(fù)用推挽輸出模式

          GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA口

          //在STM32F103C8中PA8為MCO管腳

          RCC_MCOConfig(RCC_MCO_HSE);//選擇在MCO管腳上輸出的時(shí)鐘源參數(shù)設(shè)置指定輸出的時(shí)鐘源,可取值如下:

          //RCC_MCO_NoClock:無時(shí)鐘被選中,RCC_MCO_SYSCLK:選中系統(tǒng)時(shí)鐘,RCC_MCO_HSI:選中HSI,RCC_MCO_HSE:選中HSE,RCC_MCO_PLLCLK_Div2:

          //選中PLL時(shí)鐘除以2

          //警告:當(dāng)選中系統(tǒng)時(shí)鐘作為MCO管腳的輸出時(shí),注意它的時(shí)鐘頻率不超過50MHz(最大I/O速率)。

          while(1)

          {

          GPIO_Write(GPIOB,(u16)~GPIO_ReadOutputData(GPIOB));//PB口的狀態(tài)取反

          Delay(DELAY_COUNT);

          }

          }

          voidSetSysClock(void)//設(shè)定系統(tǒng)時(shí)鐘頻率函數(shù)

          {

          #ifdefinedSYSCLK_HSE

          SetSysClockToHSE();//系統(tǒng)時(shí)鐘頻率設(shè)為HSE

          #elifdefinedSYSCLK_FREQ_20MHz

          SetSysClockTo20();//系統(tǒng)時(shí)鐘頻率設(shè)為20MHz

          #elifdefinedSYSCLK_FREQ_36MHz

          SetSysClockTo36();//系統(tǒng)時(shí)鐘頻率設(shè)為36MHz

          #elifdefinedSYSCLK_FREQ_48MHz

          SetSysClockTo48();//系統(tǒng)時(shí)鐘頻率設(shè)為48MHz

          #elifdefinedSYSCLK_FREQ_72MHz

          SetSysClockTo72();//系統(tǒng)時(shí)鐘頻率設(shè)為72MHz

          #endif

          }

          voidSetSysClockToHSE(void)//設(shè)置系統(tǒng)時(shí)鐘頻率為HSE的函數(shù)

          {

          //復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值

          RCC_DeInit();//將外設(shè)RCC寄存器重設(shè)為缺省值

          RCC_HSEConfig(RCC_HSE_ON);//打開外部高速晶振HSE

          HSEStartUpStatus=RCC_WaitForHSEStartUp();//等待外部高速時(shí)鐘準(zhǔn)備好

          if(HSEStartUpStatus==SUCCESS)

          {

          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);//使能flash的預(yù)取功能

          FLASH_SetLatency(FLASH_Latency_0);//設(shè)置flash代碼延時(shí)時(shí)鐘周期數(shù)為0

          RCC_HCLKConfig(RCC_SYSCLK_Div1);//設(shè)置AHB時(shí)鐘等于系統(tǒng)時(shí)鐘

          RCC_PCLK2Config(RCC_HCLK_Div1);//設(shè)置APB2時(shí)鐘頻率等于AHB時(shí)鐘

          RCC_PCLK1Config(RCC_HCLK_Div1);//設(shè)置APB1時(shí)鐘頻率等于AHB時(shí)鐘

          RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);//設(shè)置系統(tǒng)時(shí)鐘為HSE

          while(RCC_GetSYSCLKSource()!=0x04)//檢查系統(tǒng)時(shí)鐘是否為HSE0x04:HSE作為系統(tǒng)時(shí)鐘

          {

          }

          }

          else

          {

          while(1)

          {

          }

          }

          }

          voidSetSysClockTo20(void)//設(shè)置系統(tǒng)時(shí)鐘頻率為20MHz

          {

          RCC_DeInit();

          RCC_HSEConfig(RCC_HSE_ON);

          HSEStartUpStatus=RCC_WaitForHSEStartUp();

          if(HSEStartUpStatus==SUCCESS)

          {

          FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

          FLASH_SetLatency(FLASH_Latency_0);

          RCC_HCLKConfig(RCC_SYSCLK_Div1);

          RCC_PCLK2Config(RCC_HCLK_Div1);

          RCC_PCLK1Config(RCC_HCLK_Div1);

          RCC_PLLConfig(RCC_PLLSource_HSE_Div2,RCC_PLLMul_5);//HSE為8MHz設(shè)置PLL輸出頻率為20MHz

          RCC_PLLCmd(ENABLE);//使能PLL

          while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY)==RESET)//等待PLL就緒

          {

          }


          上一頁 1 2 下一頁

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();