- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
Запуск STM32F103VET6 от внутреннего кварца
- Kerensky
- Посетитель
12 года 2 нед. назад #3587
от Kerensky
Kerensky ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
что бы понять откуда идут такты в мк есть регистр RCC_CFGR_SWS
00 - от HSI
01 - от HSE
10 - от PLL
11 - не исп
а также регистр кот переключает RCC_CFGR_SW (значения те же)
так вот что бы переключить тактирование на что то - нужно записать соответствующее значение в RCC_CFGR_SW. Что бы он смог переключиться на указанный источник, этот источник должен быть включен и готов к использованию.
от чего бы не тактировался мк, два других источника могут быть настроены, включены и готовы к использованию.
по библиотеке system_stm32f10x.c - там если нет кварца или внешнего источника (HSE) он автоматом переключает на HSI, кот без делителей сразу подаеться на периферию.
00 - от HSI
01 - от HSE
10 - от PLL
11 - не исп
а также регистр кот переключает RCC_CFGR_SW (значения те же)
так вот что бы переключить тактирование на что то - нужно записать соответствующее значение в RCC_CFGR_SW. Что бы он смог переключиться на указанный источник, этот источник должен быть включен и готов к использованию.
от чего бы не тактировался мк, два других источника могут быть настроены, включены и готовы к использованию.
по библиотеке system_stm32f10x.c - там если нет кварца или внешнего источника (HSE) он автоматом переключает на HSI, кот без делителей сразу подаеться на периферию.
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3588
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
то что запущен 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, закоментим все предлагаемые варианты
прав ли я?
/*!< 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, закоментим все предлагаемые варианты
прав ли я?
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3589
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
прошу прощения за, возможно, тупые вопросы, но просто занимаюсь этим вопросом впервые, и не могу найти достаточно интересующей меня информации, в основном нахожу только рассмотрение общих вопросов касаемо запуска от внутреннего кварца :-[
- Денис Ягов
- Посетитель
12 года 2 нед. назад #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)
{
}
}
Если надо больше -надо поиграться множителем (максимум 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)
{
}
}
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3591
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Объясните пожалуйста, не совсем понял смысл использования этих функций в данном контексте. зачем они нам?
FLASH_SetLatency(FLASH_Latency_2);
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
- Денис Ягов
- Посетитель
12 года 2 нед. назад - 12 года 2 нед. назад #3592
от Денис Ягов
Денис Ягов ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Частота работы Флэш памяти мегагерц 30.
Вы хотите 72.
Значит пару раз надо подождать пока память считается.
Кроме того там есть буфер выборки, который при линейном исполнении кода задержку в 2 такта - исключит. Там считывает сразу 128бит. поэтому задержки нет.
Однако, если будет ветвление - задержка в 2 такта появится.
Вы хотите 72.
Значит пару раз надо подождать пока память считается.
Кроме того там есть буфер выборки, который при линейном исполнении кода задержку в 2 такта - исключит. Там считывает сразу 128бит. поэтому задержки нет.
Однако, если будет ветвление - задержка в 2 такта появится.
Последнее редактирование: 12 года 2 нед. назад пользователем .
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
Время создания страницы: 0.043 секунд