ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
26 ноября
567247
AlexG (18.12.2014 11:16, просмотров: 3333)
STM32F100C8 - проблема с настройкой тактирования на ровном месте. Обнаружил что МК работает на тактовой 12 МГц вместо 24. Причина оказалась в том, что в регистре RCC_CFGR2 задано деление тактовой на 2 и, по неизвестной причине, изменить на что-то другое не удается. Пробую обходной вариант - увеличить коэффициент умножения PLL с 6 на 12 - в регистре все равно 6 (т.е. PLLMUL=4)! Что бы это могло быть? Код: uint8_t InitClk() { uint32_t TimeOut = 10000; //Запустить HSE RCC->CR |= RCC_CR_HSEON; //Включить генератор HSE while((RCC->CR & RCC_CR_HSERDY)==0 && TimeOut) TimeOut--; //Ожидание готовности HSE if(TimeOut==0) { //Ошибка!!! Генератор HSE не запустился RCC->CFGR &= ~RCC_CFGR_PLLSRC; //Источником сигнала для PLL выбран HSI с делением на 2 RCC->CR &= ~RCC_CR_PLLON; //Отключить генератор PLL RCC->CFGR &= ~RCC_CFGR_PLLMULL; //Очистить PLLMULL RCC->CFGR |= RCC_CFGR_PLLMULL6; //Коефициент умножения = 6 RCC->CR |= RCC_CR_PLLON; //Включить генератор PLL while((RCC->CR & RCC_CR_PLLRDY)==0) {} //Ожидание готовности PLL //Переключиться на тактирование от PLL RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала RCC->CFGR |= RCC_CFGR_SW_PLL; //Выбрать источником тактового сигнала PLL while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){}//Ожидание переключения на PLL return 1; } RCC->CR |= RCC_CR_CSSON; //Разрешить работу системы защиты сбоя HSE //Настройка делителя HSE RCC->CFGR2 = RCC_CFGR2_PREDIV1_DIV1; // Делить частоту HSE на 1 << НЕ РАБОТАЕТ! //Настройка PLL RCC->CFGR |= RCC_CFGR_PLLSRC; //Источником сигнала для PLL выбран HSE RCC->CR &= ~RCC_CR_PLLON; //Отключить генератор PLL RCC->CFGR &= ~RCC_CFGR_PLLMULL; //Очистить PLLMULL //RCC->CFGR |= RCC_CFGR_PLLMULL6; //Коефициент умножения = 6 RCC->CFGR |= RCC_CFGR_PLLMULL12; //Коефициент умножения = 12 << пытаемся обойти глюк с неустановкой RCC_CFGR2 RCC->CR |= RCC_CR_PLLON; //Включить генератор PLL while((RCC->CR & RCC_CR_PLLRDY)==0) {} //Ожидание готовности PLL //Переключиться на тактирование от PLL RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала RCC->CFGR |= RCC_CFGR_SW_PLL; //Выбрать источником тактового сигнала PLL while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){}//Ожидание переключения на PLL return 0; //Все ok, работаем от HSE }