http://forum.easyelectronics.ru/viewtopic.php?t=35047&p=546084#p546084 Делал автоматический переход при сбое генерации на кварце. Вчера вечером запустить не получилось, сегодня стал разбираться внимательно и наконец то доперло: Если в обработчике стоит условие: Код: if (CLK->CSSR & CLK_CSSR_CSSD) { CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV); CLK->CSSR &=(~CLK_CSSR_CSSD); } Фиг оно отключит делитель (F=16 МГц), выскочит из обработчика и частота останется F/8 = 2МГц Нужно ждать флага AUX и соответственно обработчик будет выглядеть так: Код: if (CLK->CSSR & CLK_CSSR_CSSD) { CLK->CSSR &=(~CLK_CSSR_CSSD); } if (CLK->CSSR & CLK_CSSR_AUX) { CLK->ICKR |= CLK_ICKR_HSIEN; // <=== Можно не ставить, оно и так уже включено CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV); } Сам код настройки и переключения в основной программе: Код: //-------------Запуск в режиме HSI------------------------ CLK->ICKR |= CLK_ICKR_HSIEN; //внутренний генератор на 16MHz CLK->CKDIVR &= (uint8_t)(~CLK_CKDIVR_HSIDIV); //делитель вырубить //------------Конфигурируем HSE ------------------------- CLK->SWCR |=CLK_SWCR_SWEN; CLK->SWR = 0xB4; // как будет готов (HSERDY=1) переключится сам, ждать где то 2000 тактов CLK->ECKR |= CLK_ECKR_HSEEN; //-----------Настраиваем аварийное переключение на HSI--- CLK->CSSR |= CLK_CSSR_CSSEN; CLK->CSSR |= CLK_CSSR_CSSDIE; //прерывание включено