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