void clock_ini(void) //настройка тактирования
{
ErrorStatus HSEStartUpStatus;
/* SYSCLK, HCLK, PCLK2 and PCLK1 configuration -----------------------------*/
RCC_DeInit(); /* Системный RESET RCC (делать не обязательно, но полезно на этапе отладки) */
RCC_HSEConfig( RCC_HSE_ON); /* Включаем HSE (внешний кварц) */
HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* Ждем пока HSE будет готов */
if (HSEStartUpStatus == SUCCESS) /* Если с HSE все в порядке */
{
/* Следующие две команды касаются исключительно работы с FLASH.
Если вы не собираетесь использовать в своей программе функций работы с Flash,
FLASH_PrefetchBufferCmd( ) та FLASH_SetLatency( ) можно закомментировать */
//FLASH_PrefetchBufferCmd( FLASH_PrefetchBuffer_Enable); /* Включаем Prefetch Buffer */
/* FLASH Latency.
Рекомендовано устанавливать:
FLASH_Latency_0 - 0 ‹ SYSCLK? 24 MHz
FLASH_Latency_1 - 24 MHz ‹ SYSCLK ? 48 MHz
FLASH_Latency_2 - 48 MHz ‹ SYSCLK ? 72 MHz */
FLASH_SetLatency( FLASH_Latency_2);
RCC_HCLKConfig( RCC_SYSCLK_Div1); /* HCLK = SYSCLK */ /* Смотри на схеме AHB Prescaler. Частота не делится (RCC_SYSCLK_Div1) */
RCC_PCLK2Config( RCC_HCLK_Div1); /* PCLK2 = HCLK */ /* Смотри на схеме APB2 Prescaler. Частота не делится (RCC_HCLK_Div1) */
RCC_PCLK1Config( RCC_HCLK_Div2); /* PCLK1 = HCLK/2 */ /* Смотри на схеме APB1 Prescaler. Частота делится на 2 (RCC_HCLK_Div2) потому что на выходе APB1 должно быть не более 36МГц (смотри схему) */
/* PLLCLK = 8MHz * 9 = 72 MHz */
/* Указываем PLL от куда брать частоту (RCC_PLLSource_HSE_Div1) и на сколько ее умножать (RCC_PLLMul_9) */
/* PLL может брать частоту с кварца как есть (RCC_PLLSource_HSE_Div1) или поделенную на 2 (RCC_PLLSource_HSE_Div2). Смотри схему */
//RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
RCC_PLLConfig(RCC_PLLSource_PREDIV1 , RCC_PLLMul_9);
RCC_PLLCmd( ENABLE); /* Включаем PLL */
while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} /* Ждем пока PLL будет готов */
RCC_SYSCLKConfig( RCC_SYSCLKSource_PLLCLK); /* Переключаем системное тактирование на PLL */
while (RCC_GetSYSCLKSource() != 0x0
{} /* Ждем пока переключиться */
}
else /* Проблемы с HSE. Тут можно написать свой код, если надо что-то делать когда микроконтроллер не смог перейти на работу с внешним кварцом */
{
while (1) {} /* Пока тут заглушка - вечный цикл*/
}
}