×

Внимание

Форум находится в режиме только для чтения.

Запуск STM32F103VET6 от внутреннего кварца

11 года 5 мес. назад #3587 от Kerensky
что бы понять откуда идут такты в мк есть регистр RCC_CFGR_SWS
00 - от HSI
01 - от HSE
10 - от PLL
11 - не исп
а также регистр кот переключает RCC_CFGR_SW (значения те же)

так вот что бы переключить тактирование на что то - нужно записать соответствующее значение в RCC_CFGR_SW. Что бы он смог переключиться на указанный источник, этот источник должен быть включен и готов к использованию.

от чего бы не тактировался мк, два других источника могут быть настроены, включены и готовы к использованию.

по библиотеке system_stm32f10x.c - там если нет кварца или внешнего источника (HSE) он автоматом переключает на HSI, кот без делителей сразу подаеться на периферию.
11 года 5 мес. назад #3588 от Stepanov Ivan
то что запущен HSI видно в регистрах, то что он готов тоже, и тактирование вроде бы от него, НО, обратил внимание в процедуре SystemInit, а конкретно когда вызывается подпроцедура  SetSysClock, программа виснет, те зацикливается. Выше в той же библиотеке я закоментил:

/*!< Uncomment the line corresponding to the desired System clock (SYSCLK)
  frequency (after reset the HSI is used as SYSCLK source) */
//#define SYSCLK_FREQ_HSE    HSE_Value
//#define SYSCLK_FREQ_20MHz  20000000
//#define SYSCLK_FREQ_36MHz  36000000
//#define SYSCLK_FREQ_48MHz  48000000
//#define SYSCLK_FREQ_56MHz  56000000
//#define SYSCLK_FREQ_72MHz  72000000 // для запуска от HSI, закоментим все предлагаемые варианты

прав ли я?
11 года 5 мес. назад #3589 от Stepanov Ivan
прошу прощения за, возможно, тупые вопросы, но просто занимаюсь этим вопросом впервые, и не могу найти достаточно интересующей меня информации, в основном нахожу только рассмотрение общих вопросов касаемо запуска от внутреннего кварца :-[
11 года 5 мес. назад #3590 от Денис Ягов
Денис Ягов ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Процедура, которая устанавливает чатоту 24МГц от внутреннегои RC-генератора.
Если надо больше -надо поиграться множителем (максимум 64МГц)


void RCC_Configuration(void)
{
    RCC_DeInit();

    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    RCC_PCLK2Config(RCC_HCLK_Div1);
    RCC_PCLK1Config(RCC_HCLK_Div1);

    FLASH_SetLatency(FLASH_Latency_2);
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_6);
    RCC_PLLCmd(ENABLE);
      while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
      {
      }
      RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

      while(RCC_GetSYSCLKSource() != 0x08)
      {
      }

}
11 года 5 мес. назад #3591 от Stepanov Ivan


    FLASH_SetLatency(FLASH_Latency_2);
    FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);

Объясните пожалуйста, не совсем понял смысл использования этих функций в данном контексте. зачем они нам?
11 года 5 мес. назад - 11 года 5 мес. назад #3592 от Денис Ягов
Денис Ягов ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Частота работы Флэш памяти мегагерц 30.
Вы хотите 72.
Значит пару раз надо подождать пока память считается.

Кроме того там есть буфер выборки, который при линейном исполнении кода задержку в 2 такта - исключит. Там считывает сразу 128бит. поэтому задержки нет.

Однако, если будет ветвление - задержка в 2 такта появится.
Время создания страницы: 0.059 секунд
Работает на Kunena форум