STM32F103的復(fù)位及時鐘控制模塊頭文件
該測試工程是在以前的GPIO實驗的基礎(chǔ)上增加系統(tǒng)時鐘初始化代碼,設(shè)置系統(tǒng)時鐘為72M。通過流水燈可以看到,比未配置系統(tǒng)時鐘之前(8M)流水燈的速度快了很多。
從這里下載完整的測試工程:
系統(tǒng)時鐘初始化的代碼如下:
//以下時鐘配置為最高性能
void SystemClockInit(void)
{
//設(shè)置flash等待周期為2,否則設(shè)置為72M系統(tǒng)時鐘時就會跑飛
FLASH_ACR=0x32;
pbRCC_CR->HSEON=1; //使能外部高速時鐘
while(!(pbRCC_CR->HSERDY)); //等待外部高速時鐘穩(wěn)定
pbRCC_CFGR->MCO=0; //MCO無時鐘輸出
pbRCC_CFGR->USBPRE=1; //USB時鐘1.5分頻
pbRCC_CFGR->PLLMUL=9-2; //PLL倍頻設(shè)置為9倍(外部時鐘8M,PLL輸出72M)
pbRCC_CFGR->PLLXTPRE=0; //HSE不分頻
pbRCC_CFGR->PLLSRC=1; //HSE選作做為PLL時鐘源輸入
pbRCC_CFGR->ADCPRE=0; //ADC時鐘2分頻
pbRCC_CFGR->PPRE2=1+6; //APB2設(shè)置為1分頻
pbRCC_CFGR->PPRE1=2+6; //APB1設(shè)置為2分頻
pbRCC_CFGR->HPRE=0; //AHB無分頻
pbRCC_CR->PLLON=1; //啟動PLL
while(!(pbRCC_CR->PLLRDY)); //等待PLL穩(wěn)定
pbRCC_CFGR->SW=2; //選擇PLL輸出為時鐘源
//pbRCC_AHBENR->SRAMEN=1;
//pbRCC_AHBENR->FLITFEN=1;
//IO口第二功能時鐘使能
pbRCC_APB2ENR->AFIOEN=1;
//各通用IO口時鐘使能
pbRCC_APB2ENR->IOPAEN=1;
pbRCC_APB2ENR->IOPBEN=1;
pbRCC_APB2ENR->IOPCEN=1;
pbRCC_APB2ENR->IOPDEN=1;
pbRCC_APB2ENR->IOPEEN=1;
//ADC時鐘使能
pbRCC_APB2ENR->ADC1EN=1;
pbRCC_APB2ENR->ADC2EN=1;
//定時器1時鐘使能
pbRCC_APB2ENR->TIM1EN=1;
//SPI1時鐘使能
pbRCC_APB2ENR->SPI1EN=1;
//串口1時鐘使能
pbRCC_APB2ENR->USART1EN=1;
//定時器2、3、4時鐘使能
pbRCC_APB1ENR->TIM2EN=1;
pbRCC_APB1ENR->TIM3EN=1;
pbRCC_APB1ENR->TIM4EN=1;
//窗口看門狗時鐘不使能
pbRCC_APB1ENR->WWDGEN=0;
//SPI2時鐘使能
pbRCC_APB1ENR->SPI2EN=1;
//串口2、3時鐘使能
pbRCC_APB1ENR->USART2EN=1;
pbRCC_APB1ENR->USART3EN=1;
//I2C1、2時鐘使能
pbRCC_APB1ENR->I2C1EN=1;
pbRCC_APB1ENR->I2C2EN=1;
//USB時鐘使能
pbRCC_APB1ENR->USBEN=1;
//CAN時鐘使能
pbRCC_APB1ENR->CANEN=1;
//備份接口時鐘使能
pbRCC_APB1ENR->BKPEN=1;
//電源接口時鐘使能
pbRCC_APB1ENR->PWREN=1;
//外部低速時鐘啟動
pbRCC_BDCR->LSEON=1;
pbRCC_BDCR->LSEBYP=0;
pbRCC_BDCR->RTCSEL=1; //選擇外部時鐘為RTC時鐘
}
評論