Всем доброго времени суток!
Столкнулся с похожей проблемой; Использую CooCox CoIDE и отладочную плату STM32F401C-Discovery;
Код:
void PLL_init(void)
{
RCC_DeInit();
RCC_PLLCmd(DISABLE);
while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
RCC_HCLKConfig(RCC_SYSCLK_Div1);
RCC_PCLK1Config(RCC_HCLK_Div2);
RCC_PCLK2Config(RCC_HCLK_Div1);
RCC_PLLConfig(RCC_PLLSource_HSI, 16, 336, 4, 7);
RCC_PLLCmd(ENABLE);
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
while (RCC_GetSYSCLKSource() != 0x08);
}
Уважаемые знатоки, прошу ткнуть носом в ошибку!
Заранее спасибо!
P.S. Если быть более точным, то микроконтроллер виснет после
Код:
RCC->CFGR = tmpreg;
(последняя команда "RCC_SYSCLKConfig" в "stm32f4xx_rcc.с")
Спойлер
функция RCC_SYSCLKConfig из stm32f4xx_rcc.с;
Код:
void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
{
uint32_t tmpreg = 0;
/* Check the parameters */
assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));
tmpreg = RCC->CFGR;
/* Clear SW[1:0] bits */
tmpreg &= ~RCC_CFGR_SW;
/* Set SW[1:0] bits according to RCC_SYSCLKSource value */
tmpreg |= RCC_SYSCLKSource;
/* Store the new value */
RCC->CFGR = tmpreg;
}
P.P.S:
1) Не важно какой источник у ФАПЧ - внешний кварц или внутренний RC.
2) Параметры, использующиеся для настройки ФАПЧ, тоже не играют значения - результат одинаковый.
3) После этого (см. скрин [отладчик + дисассемблер]) мк "уходит в глубочайший запой" и не на что не отвечает.
Вложение:
Комментарий к файлу: Скрин
Снимок.PNG [220.16 KiB]
Скачиваний: 736