СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №6/2013

ту некоторых важных блоков с по мощью битовых флагов готовности, что позволяет осуществлять проверку активации инициируемых блоков в процессе самой инициализации. После включения или сброса микро контроллер тактируется от встроенно го RC генератора HSI. В процессе ра боты возможно переключение источ ника тактовых импульсов при помощи установки соответствующей комбина ции двух младших битов SW (System clock switch) регистра RCC_CFGR: SW[1:0] = 00: тактирование от HSI; SW[1:0] = 01: HSE; SW[1:0] = 10: PLL; SW[1:0] = 11: зарезервировано. Определить, какой из генераторов в данный момент используется в каче стве тактового, можно по состоянию битов SWS (System clock switch status): SWS[1:0] = 00: используется генера тор HSI; SWS[1:0] = 01: используется генера тор HSE; SWS[1:0] = 10: тактирование от бло ка PLL; SWS[1:0] = 11: зарезервировано. Перед выборомисточника тактового сигнала необходимо предварительно произвести его запуск и удостоверить ся в его готовности к работе. Включение генераторов HSI, HSE и PLL производится установкой би тов HSION, HSEON и PLLON регистра RCC_CR. Готовность генераторов к ра боте можно проследить по установке флагов HSERDY, HSERDY или PLLRDY тогоже регистра. Влистинге 1приведён фрагмент кода программына языке Си, осуществляющий данную процедуру. Битвключения генератораHSIONтак же может быть установлен аппаратно при входе в режимымикроконтроллера Stop или Standby. При этом бит HSEON будет сброшен в нулевое состояние. В случаеопределениязащитнойсистемой сбоеввработегенератораHSE, настроен ного в качестве системного генератора непосредственно или через PLL, автома тическибудетустановленбитHSION.Для сниженияэнергопотреблениягенератор, не используемый как тактовый в теку щиймомент,можетбытьотключёнсбро сомбитаHSIONилиHSEON. Встроенная система контроля CSS блока тактирования микроконтролле ров STM32 способна отслеживать от каз или нестабильную работу генера тора HSE, осуществлять автоматиче ское переключение тактирования на встроенный генератор HSI с автомати ческим вызовом немаскируемого пре рывания NMI. Для включения в работу системы CSS необходимо установить бит CSSON регистра RCC_CR с по мощью следующего оператора: RCC >CR| = RCC_CR_CSSON; // Раз решить работу системы защиты HSE С цельюисключения повторных вы зовов в обработчике немаскируемых прерываний NMI необходимо сбро сить флаг системы CSS (см. листинг 2). До того как PLL будет выбран для так тирования микроконтроллера уста новкой битов SW[1:0] = 10 регистра RCC_CFGR, необходимо выбрать ис точник входной частоты блока, а так же проинициализировать параметры входных источников и самого моду ля PLL. Выбор входного источника для PLL осуществляется записью бита PLLSRC конфигурационного регистра системы тактирования RCC_CFGR: PLLSRC = 0: HSI/2, выбран генератор HSI с делением частоты на 2; PLLSRC = 1: выбран генератор HSE/ PREDIV1. Биты PREDIV1 регистра RCC_CFGR2 задают коэффициент предварительно го деления частоты генератора HSE от 1 до 16 перед его подачей на вход PLL по следующей формуле: n = PREDIV1[3:0] + 1. Назначение этих битов приведено ниже: PREDIV1[3:0] = 0000 ( 0): нет деления; PREDIV1[3:0] = 0001 ( 1): деление на 2; PREDIV1[3:0] = 0010 ( 2): деление на 3; … PREDIV1[3:0] =1110(14): делениена15; PREDIV1[3:0] =1111(15): делениена16. Блок PLL осуществляет умножение входной частоты в соответствии со значением комбинации битов PLLMUL регистра RCC_CFGR по формуле m = = PLLMUL[3:0] + 2, но не более чем в 16 раз. Биты PLLMUL[3:0] соответствуют разрядам [21:18] регистра RCC_CFGR. Ниже приведено их назначение: PLLMUL[3:0]=0000(0):умножениена2; PLLMUL[3:0]=0001(1):умножениена3; PLLMUL[3:0]=0010(2):умножениена4; … PLLMUL[3:0] = 1101 (13): умножение на 15; PLLMUL[3:0] = 1110 (14): умножение на 16; PLLMUL[3:0] = 1111 (15): тоже умно жение на 16. В листинге 3 пример инициализа ции, запуска и выбора PLL для тактиро вания микроконтроллера STM32: Более подробное описание назначе ния регистров системы тактирования можно найти в источнике [2]. Л ИТЕРАТУРА 1. https://www.st.com 2. http://www.st.com/web/en/resource/ technical/document/reference_manual/ CD00246267.pdf ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 22 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 6 2013 Листинг 2. Фрагмент программы обработчика немаскируемых прерываний NMI // Обработчик немаскируемых прерываний NMI, вызываемый при сбое HSE void NMI_Handler(void) { // Сбросить флаг системы контроля CSS if (RCC >CIR & RCC_CIR_CSSF) RCC >CIR| = RCC_CIR_CSSC; } Листинг 3. Пример инициализации, запуска и выбора PLL для тактирования STM32 char PLL_MUL = 12; // Коэффициент умножения PLL RCC >CFGR2 &=~(RCC_CFGR2_PREDIV1); // Обнуление делителя HSE RCC >CFGR2| = RCC_CFGR2_PREDIV1_DIV4; // Делить частоту HSE на 4 RCC >CFGR &=~((RCC_CFGR_PLLSRC|RCC_CFGR_PLLXTPRE|RCC_CFGR_PLLMULL)); // Обнуле ние RCC >CFGR| = RCC_CFGR_PLLSRC_PREDIV1; // Тактировать PLL от HSE/PREDIV1 RCC >CFGR| = ((PLL_MUL – 2)<<18); // Умножить частоту PLL_MUL RCC >CR| = RCC_CR_PLLON; // Запустить PLL while((RCC >CR & RCC_CR_PLLRDY)==0) {} // Ожидание готовности PLL RCC >CFGR &=~RCC_CFGR_SW; // Очистить биты SW0 и SW1 RCC >CFGR| = RCC_CFGR_SW_PLL; // Тактирование с выхода PLL while((RCC >CFGR&RCC_CFGR_SWS)!=0x08){} // Ожидание переключения на PLL ©СТА-ПРЕСС

RkJQdWJsaXNoZXIy MTQ4NjUy