- Главная
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
Запуск STM32F103VET6 от внутреннего кварца
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3580
от Stepanov Ivan
Stepanov Ivan создал тему: Запуск STM32F103VET6 от внутреннего кварца
Здравтвуйте люди добрые! Кто нить занимался данным вопросом? Итересует возможность запуска мк на тактовой частоте в 1МГц. Вычитал что HSI на 8МГц, и вроде как есть возможность уменьшить эту частоту в двое, те 4МГц в итоге, через PLL?
- Kerensky
- Посетитель
12 года 2 нед. назад #3582
от Kerensky
Kerensky ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Да у него есть внутренняя RC цепь на 8 МГц
ее можно использовать как источник тактирования мк (HSI)
или как источник тактирования для внутреннего множетеля (PLL)
в первом случае вы получите тактирование в 8 МГц
во втором от 16 до 72 с шагом в 4 МГц
Но, у мк есть предделитель на шину периферии исключая USB, наз. AHB Prescaler
кроме того есть еще предделители на отдельные части (AHB1, AHB2, ADC Prescaller)
с помощю этого на периферию можно подать 1 МГц
вот простенький код как от внутреннего кварца подать на периферию 1 МГц
//Настройка PLL
RCC->CFGR &= ~RCC_CFGR_PLLSRC; //Источником сигнала для PLL выбран HSI с делением на 2
RCC->CR &= ~RCC_CR_PLLON; //Отключить генератор PLL
RCC->CFGR &= ~RCC_CFGR_PLLMULL; //Очистить PLLMULL
RCC->CFGR |= RCC_CFGR_PLLMULL4; //Коефициент умножения = 4
RCC->CR |= RCC_CR_PLLON; //Включить генератор PLL
while((RCC->CR & RCC_CR_PLLRDY)==0) {} //Ожидание готовности PLL
//Переключиться на тактирование от PLL
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_PLL; //Выбрать источником тактового сигнала PLL
while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){}//Ожидание переключения на PLL
//Настроить делитель для AHB
RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler"
RCC->CFGR |= RCC_CFGR_HPRE_DIV16; //Установить "AHB Prescaler" равным 16
ее можно использовать как источник тактирования мк (HSI)
или как источник тактирования для внутреннего множетеля (PLL)
в первом случае вы получите тактирование в 8 МГц
во втором от 16 до 72 с шагом в 4 МГц
Но, у мк есть предделитель на шину периферии исключая USB, наз. AHB Prescaler
кроме того есть еще предделители на отдельные части (AHB1, AHB2, ADC Prescaller)
с помощю этого на периферию можно подать 1 МГц
вот простенький код как от внутреннего кварца подать на периферию 1 МГц
//Настройка PLL
RCC->CFGR &= ~RCC_CFGR_PLLSRC; //Источником сигнала для PLL выбран HSI с делением на 2
RCC->CR &= ~RCC_CR_PLLON; //Отключить генератор PLL
RCC->CFGR &= ~RCC_CFGR_PLLMULL; //Очистить PLLMULL
RCC->CFGR |= RCC_CFGR_PLLMULL4; //Коефициент умножения = 4
RCC->CR |= RCC_CR_PLLON; //Включить генератор PLL
while((RCC->CR & RCC_CR_PLLRDY)==0) {} //Ожидание готовности PLL
//Переключиться на тактирование от PLL
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_PLL; //Выбрать источником тактового сигнала PLL
while((RCC->CFGR&RCC_CFGR_SWS)!=0x08){}//Ожидание переключения на PLL
//Настроить делитель для AHB
RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler"
RCC->CFGR |= RCC_CFGR_HPRE_DIV16; //Установить "AHB Prescaler" равным 16
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3583
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
ясно, а как в таком случае запустить тактирование от HSI напрямую, без предделителей?
- Kerensky
- Посетитель
12 года 2 нед. назад #3584
от Kerensky
Kerensky ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
ваще 4 строчки
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбрать источником тактового сигнала HSI
будет 8 МГц +- 1% при 25 градусах С
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбрать источником тактового сигнала HSI
будет 8 МГц +- 1% при 25 градусах С
- Kerensky
- Посетитель
12 года 2 нед. назад #3585
от Kerensky
Kerensky ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
или 1 МГц без PLL
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбрать источником тактового сигнала HSI
//Настроить делитель для AHB
RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler"
RCC->CFGR |= RCC_CFGR_HPRE_DIV8; //Установить "AHB Prescaler" равным 8
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI
RCC->CFGR &= ~RCC_CFGR_SW; //Очистка битов выбора источника тактового сигнала
RCC->CFGR |= RCC_CFGR_SW_HSI; //Выбрать источником тактового сигнала HSI
//Настроить делитель для AHB
RCC->CFGR &= ~RCC_CFGR_HPRE; //Очистка битов предделителя "AHB Prescaler"
RCC->CFGR |= RCC_CFGR_HPRE_DIV8; //Установить "AHB Prescaler" равным 8
- Stepanov Ivan
- Автор темы
- Посетитель
12 года 2 нед. назад #3586
от Stepanov Ivan
Stepanov Ivan ответил в теме Re: Запуск STM32F103VET6 от внутреннего кварца
Судя по регистрам RCC_CR и RCC_CFGR, HSI у меня запущен и ждет действий (выставил флаг готовности), а согласно коду биьлиотеки system_stm32f10x.c:
#else /*!< HSI Selected as System Clock source */
const uint32_t SystemFrequency = HSI_Value; /*!< System Clock Frequency (Core Clock) */
const uint32_t SystemFrequency_SysClk = HSI_Value; /*!< System clock */
const uint32_t SystemFrequency_AHBClk = HSI_Value; /*!< AHB System bus speed */
const uint32_t SystemFrequency_APB1Clk = HSI_Value; /*!< APB Peripheral bus 1 (low) speed */
const uint32_t SystemFrequency_APB2Clk = HSI_Value; /*!< APB Peripheral bus 2 (high) speed */
#endif
на шины перефирии уже должно быть подано значение частоты HSI. так ли это?
да, и еще, почему то значение бита RCC_CR_HSEON равно 1, хотя я не выставлял его :-\ из за этого у меня тактирование по HSI не проходит?
#else /*!< HSI Selected as System Clock source */
const uint32_t SystemFrequency = HSI_Value; /*!< System Clock Frequency (Core Clock) */
const uint32_t SystemFrequency_SysClk = HSI_Value; /*!< System clock */
const uint32_t SystemFrequency_AHBClk = HSI_Value; /*!< AHB System bus speed */
const uint32_t SystemFrequency_APB1Clk = HSI_Value; /*!< APB Peripheral bus 1 (low) speed */
const uint32_t SystemFrequency_APB2Clk = HSI_Value; /*!< APB Peripheral bus 2 (high) speed */
#endif
на шины перефирии уже должно быть подано значение частоты HSI. так ли это?
да, и еще, почему то значение бита RCC_CR_HSEON равно 1, хотя я не выставлял его :-\ из за этого у меня тактирование по HSI не проходит?
- Форум
- Микроконтроллеры и Системы на Модуле (SOM)
- Микроконтроллеры
- Запуск STM32F103VET6 от внутреннего кварца
Время создания страницы: 0.038 секунд