реклама на сайте
подробности

 
 
> STM32 Внешний генератор
war4one
сообщение Jul 5 2011, 09:14
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 264
Регистрация: 16-07-05
Из: г. Уфа
Пользователь №: 6 851



STM32 тактируется от внутреннего 8 МГц генератора, при умножении на PLL получаем тактовую 32. При подключении внешнего генератора 6 МГц, но без изменения программы (т. е. МК должен тактироваться все еще от встроенного RC-генератора) я вижу изменение тактовой (раньше таймер выдавал прерывание каждую 1 с, а теперь каждые 1.8 с). Чем это объяснить?

Код инициализации тактовой частоты:
Код
void InitClock(void)    // Инициализируем и раздаем клоки
{
    __IO uint32_t HSEStatus = (uint32_t)0x00;                    // Работа от HSI

    FLASH->ACR |= FLASH_ACR_PRFTBE;    // Включаем буфер предвыборки FLASH
    // Конфигурируем Flash на 2 цикла ожидания
    FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
    FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;    
    // HCLK = SYSCLK
    RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
    // PCLK2 = HCLK
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
    //PCLK1 = HCLK
    RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;
    // Конфигурируем множитель PLL configuration: PLLCLK = (8/2) * 8 = 32 MHz
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
    RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSI_Div2 | RCC_CFGR_PLLMULL8);
    // Включаем PLL
    RCC->CR |= RCC_CR_PLLON;
    // Ожидаем, пока PLL выставит бит готовности
    while((RCC->CR & RCC_CR_PLLRDY) == 0){}
    // Выбираем PLL как источник системной частоты
    RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
    RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;    
    // Ожидаем, пока PLL выберется как источник системной частоты
    while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08) {}

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);    // Включаем тактирование PORTA
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);    // Включаем тактирование PORTB
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE);     // Включаем тактирование SPI
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);    // Включаем тактирование таймера 2
}


--------------------
Электронные устройства Open Hardware
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016