四:代碼
RCC
#include “Rcc.h”
void RCC_Init(void)
{
ErrorStatus HSEStartUpStatus;
//定義枚舉類型錯誤狀態變量
RCC_DeInit();//復位系統時鐘設置
RCC_HSEConfig(RCC_HSE_ON);
//打開外部高速時鐘晶振,使能HSE
/*RCC_HSE_ON 開
_off 關 _bypass hse晶振被外部時鐘旁路*/
HSEStartUpStatus = RCC_WaitForHSEStartUp();
/*RCC_WaitForHSEStartUp()返回一個ErrorStatus枚舉值,
success好,error未好*/
if(HSEStartUpStatus == SUCCESS)//HES就緒
{
RCC_HCLKConfig(RCC_SYSCLK_Div1);
//AHB時鐘(HCLK)=系統時鐘
RCC_PCLK1Config(RCC_HCLK_Div2);
//設置低速AHB時鐘(APB1)為HCLK的2分頻
RCC_PCLK2Config(RCC_HCLK_Div1);
//設置高速AHB時鐘(APB2)=HCLK時鐘
FLASH_SetLatency(FLASH_Latency_2);
//設置FLASH延時周期數為2
//使能領取指緩存
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
//設置PLL時鐘源及倍頻系數,為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輸出穩定
/*FlagStatus RCC_GetFlagStatus(u8 RCC_FLAG) 檢查指定RCC標志位
返回SET OR RESET
RCC_FLAG_HSIRDY HSI晶振就緒
RCC_FLAG_HSERDY
RCC_FLAG_PLLRDY
RCC_FLAG_LSERDY
RCC_FLAG_LSIRDY.。。。。。.*/
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
//設置PLL為系統時鐘源
/*void RCC_SYSCLKConfig(u32 RCC_SYSCLKSource) 設置系統時鐘
RCC_SYSCLKSource_HSI
RCC_SYSCLKSource_HSE
RCC_SYSCLKSource_PLLCLK 選HSI HSE PLL 作為系統時鐘*/
while(RCC_GetSYSCLKSource() != 0x08);
//判斷PLL是否是系統時鐘
/*u8 RCC_GetSYSCLKSource(void) 返回用作系統時鐘的時鐘源
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時鐘,復用功能,串口1的時鐘
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);//使能CAN1時鐘
//好奇怪,是因為官方的庫函數更新?
//不是說F10X系列只有一個CAN,而F4有CAN1 CAN2 嗎?
//怎么他的系統配置文件里面是can1?????
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); //時鐘使能
/*void RCC_APB2PeriphClockCmd(u32 RCC_APB2Periph, FunctionalState NewState)
enable 或 disable apb2 外設時鐘
RCC_APB2Periph_AFIO 功能復用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外設時鐘*/
}
評論