А Latency для флэш выставили?
Если нет, то неудивительно, что зависает.
Вот мой код, кварц 12 Мгц.
Измените cMainFreq на 8, должно заработать.
PHP код:
|
//system quartz #define cMainFreq 12 #define cVCOClock 336
//Division coeff for input clock ›=2 #define cPLLM 4
//Mul for VCO #define cPLLN (cVCOClock*cPLLM / cMainFreq)
//Div for main system clock 336 Mhz, 0 for 2 (page 162) #define cPLLP 0
//divider for USB 48MHz #define cPLLQ (cVCOClock / 48)
void InitClock(void){
RCC-›APB1ENR |= RCC_APB1ENR_PWREN; //PWR_CR Page 138 PWR-›CR |=PWR_CR_PLS | PWR_CR_PVDE | PWR_CR_VOS_0; while (!(PWR-›CSR & PWR_CSR_VOSRDY));
//RCC register page 159 RCC-›CR |=RCC_CR_HSEON; // Enable external quartz while (!(RCC-›CR & RCC_CR_HSERDY)); //wait for quartz ready
// Config Flash // Latency page 80 Refman FLASH-›ACR = FLASH_ACR_PRFTEN | FLASH_ACR_ICEN | FLASH_ACR_DCEN | FLASH_ACR_LATENCY_5WS; //Config PLL RCC-›PLLCFGR=(cPLLQ‹‹24) | (cPLLP‹‹16) | (cPLLN‹‹6) | cPLLM | RCC_PLLCFGR_PLLSRC_HSE; //page 162 RCC-›CR |= RCC_CR_PLLON; while (!(RCC-›CR & RCC_CR_PLLRDY)); //wait for PLL ready //RCC register page 159 RCC-›CFGR |= RCC_CFGR_HPRE_DIV1; //page 151 Max freq AHB 180 MHz, current 168 RCC-›CFGR |= RCC_CFGR_PPRE2_DIV2; //page 151 Max freq APB2 90 MHz, current 84 RCC-›CFGR |= RCC_CFGR_PPRE1_DIV4; //page 151 Max freq APB1 45 MHz, current 42
//Выбираем источником тактового сигнала генератор PLL: //page 95, PLL selected as system clock
RCC-›CFGR = (RCC-›CFGR & ~0x03) | RCC_CFGR_SW_PLL; //Ждем когда контроллер перейдет на тактирование от PLL: while ((RCC-›CFGR & RCC_CFGR_SWS ) != RCC_CFGR_SWS_PLL);
RCC-›CR &= ~RCC_CR_HSION; // page 159, HSI clock 16 MHz Off
}
|
P.S. Где написано page nnn - это номер страницы в reference manual, где про это написано. Пишу для удобства, потом через время проще разбираться.