四:代碼
RCC
#include “Rcc.h”
void RCC_Init(void)
{
ErrorStatus HSEStartUpStatus;
//定義枚舉類型錯誤狀態(tài)變量
RCC_DeInit();//復(fù)位系統(tǒng)時鐘設(shè)置
RCC_HSEConfig(RCC_HSE_ON);
//打開外部高速時鐘晶振,使能HSE
/*RCC_HSE_ON 開
_off 關(guān) _bypass hse晶振被外部時鐘旁路*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/*RCC_WaitForHSEStartUp()返回一個ErrorStatus枚舉值,
success好,error未好*/
if(HSEStartUpStatus == SUCCESS)//HES就緒
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//AHB時鐘(HCLK)=系統(tǒng)時鐘
RCC_PCLK1Config(RCC_HCLK_Div2);
//設(shè)置低速AHB時鐘(APB1)為HCLK的2分頻
RCC_PCLK2Config(RCC_HCLK_Div1);
//設(shè)置高速AHB時鐘(APB2)=HCLK時鐘
FLASH_SetLatency(FLASH_Latency_2);
//設(shè)置FLASH延時周期數(shù)為2
//使能領(lǐng)取指緩存
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//設(shè)置PLL時鐘源及倍頻系數(shù),為HSE的9倍頻 8MHz * 9 = 72MHz
/*void RCC_PLLConfig(u32 RCC_PLLSource, u32 RCC_PLLMul)
RCC_PLLSource_HSI_Div2 pll輸入時鐘=hsi/2;
RCC_PLLSource_HSE_Div1 pll輸入時鐘 =hse
RCC_PLLSource_HSE_Div2 pll輸入時鐘=hse/2
RCC_PLLMul_2 ------_16 pll輸入時鐘*2---16
pll輸出時鐘不得超過72MHZ*/
RCC_PLLCmd(ENABLE);
//ENABLE / DISABLE
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);//等待PLL輸出穩(wěn)定
/*FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG) 檢查指定RCC標(biāo)志位
返回SET OR RESET
RCC_FLAG_HSIRDY HSI晶振就緒
RCC_FLAG_HSERDY
RCC_FLAG_PLLRDY
RCC_FLAG_LSERDY
RCC_FLAG_LSIRDY.。。。。。.*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//設(shè)置PLL為系統(tǒng)時鐘源
/*void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource) 設(shè)置系統(tǒng)時鐘
RCC_SYSCLKSource_HSI
RCC_SYSCLKSource_HSE
RCC_SYSCLKSource_PLLCLK 選HSI HSE PLL 作為系統(tǒng)時鐘*/
while(RCC_GetSYSCLKSource() != 0x08);
//判斷PLL是否是系統(tǒng)時鐘
/*u8 RCC_GetSYSCLKSource(void) 返回用作系統(tǒng)時鐘的時鐘源
0x00:HSI 0x04:HSE 0x08:PLL */
}
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |
RCC_APB2Periph_AFIO |
RCC_APB2Periph_GPIOB , ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
//U2 U3 時鐘在APB1
//打開GPIO時鐘,復(fù)用功能,串口1的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1時鐘
//好奇怪,是因為官方的庫函數(shù)更新?
//不是說F10X系列只有一個CAN,而F4有CAN1 CAN2 嗎?
//怎么他的系統(tǒng)配置文件里面是can1?????
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時鐘使能
/*void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState)
enable 或 disable apb2 外設(shè)時鐘
RCC_APB2Periph_AFIO 功能復(fù)用IO 時鐘
RCC_APB2Periph_GPIOA/B/C/D/E GPIOA/B/C/D/E 時鐘
RCC_APB2Periph_ADC1/ADC2 ADC1/2 時鐘
RCC_APB2Periph_TIM1
RCC_APB2Periph_SPI1
RCC_APB2Periph_USART1
RCC_APB2Periph_ALL 全部APB2外設(shè)時鐘*/
}
評論
查看更多