Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


 
Опции темы

STM32 Изменить тактовую частоту во время выполнения

Непрочитано 24.12.2013, 21:07  
Jane9226
Прописка
 
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Jane9226 на пути к лучшему
По умолчанию STM32 Изменить тактовую частоту во время выполнения

Собственно вопрос озвучен в названии темы. Во время выполнения программы есть желание изменить прескаллеры AHB и APB2. Возможно ли это сделать не сбрасывая контроллер? Если да, подскажите пожалуйста последовательность действий. Спасибо.
Реклама:
Jane9226 вне форума  
Непрочитано 24.12.2013, 22:16  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,821
Сказал спасибо: 919
Сказали Спасибо 4,289 раз(а) в 2,570 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Конечно, возможно.
Вложения:
Тип файла: rar STM32generator.rar (345.5 Кб, 95 просмотров)
Easyrider83 вне форума  
Сказали "Спасибо" Easyrider83
Jane9226 (25.12.2013)
Непрочитано 24.12.2013, 23:37  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
Смех Re: STM32 Изменить тактовую частоту во время выполнения

Сообщение от Easyrider83 Посмотреть сообщение
Конечно
stm32f10x_rcc.c
http://www.st.com/web/catalog/tools/...S1743/PF257890
omercury вне форума  
Сказали "Спасибо" omercury
Jane9226 (25.12.2013)
Непрочитано 25.12.2013, 01:26  
Jane9226
Прописка
 
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Jane9226 на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Спасибо, только это немного не то.... Как выставить нужную частоту я уже поняла, поигравшись с файлом system_stm32f10x.c Прошлаcь пошагово
SystemInit() -› SetSysClock() -› SetSysClockToHSE() именно в SetSysClockToHSE() (в моей конфигурации) выставляются все делители и множитель PLL в регистрах CFGR и CFGR2, там же включаем PLL и выбираем PLL в качестве системной частоты и последнее вызывается SystemCoreClockUpdate.

Ну вот система инициализирована, начинает выполняться main.... И вот по прошедствии энного колличества времени мне вздумалось изменить прескаллер APB2
Системная частота уже выставлена, мне нужно изменить только APB2
какова последовательность?
Jane9226 вне форума  
Непрочитано 25.12.2013, 07:51  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Сообщение от Jane9226 Посмотреть сообщение
Ну вот система инициализирована, начинает выполняться main.... И вот по прошедствии энного колличества времени мне вздумалось изменить прескаллер APB2
Системная частота уже выставлена, мне нужно изменить только APB2
какова последовательность?
Никакой последовательности
Тупо меняем биты в одном-единственном регистре, например, записью
RCC-›CFGR = 0x30009402;

Неужели так страшно открыть даташит??

niXto вне форума  
Непрочитано 26.12.2013, 00:27  
Jane9226
Прописка
 
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Jane9226 на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Сообщение от niXto Посмотреть сообщение
Никакой последовательности
Вы точно в этом уверены?
Провела тест: В бесконечном цикле проверяю состояние кнопки и в зависимости от этого состояния меняю прескаллер
Код:
	//Объявляем переменную для хранения состояния кнопки  
    uint8_t buttonState = 0; 
.
.
.
while(1)
	{
        //считываем  состояние кнопки   
            
        buttonState = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);  
        if (buttonState == 1) 
        {   
            /* APB2 */			
	   RCC-›CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
        }   
        else    
        {      
            /* APB2 делим на 16, итого получим 24 000 000 / 16 = 1 500 000*/			
	    RCC-›CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
        }
	}
Программа исправно выполняет инструкцию, только вот состояние битов PPRE2 не меняется! Такое впечатление что они заблокированы во время выполнения. Поэтому я и прошу помощи, спрашивая последовательность действий. На скриншотах это видно. Еще раз для уточнения. Проверяется все в железе плата STM32VLDISCOVERY, IDE Keil uVision4. Когда я прохожу по шагам (после сброса) функцию SetSysClockToHSE(void) в файле system_stm32f10x.c эти биты исправно устанавливаются в соответствии с инструкциями. После, в главном цикле НЕТ.
Миниатюры:
Нажмите на изображение для увеличения
Название: Before_PPRE2.png
Просмотров: 149
Размер:	73.4 Кб
ID:	56742   Нажмите на изображение для увеличения
Название: After_PPRE2.png
Просмотров: 71
Размер:	89.0 Кб
ID:	56743  
Jane9226 вне форума  
Непрочитано 26.12.2013, 01:25  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Всё там переключается, не надо извращаться над кодом.
Код:
RCC-›CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV16;
__NOP();
__NOP();

RCC-›CFGR &= ~(uint32_t)RCC_CFGR_PPRE2_DIV16;
__NOP();
__NOP();
nahimovv вне форума  
Сказали "Спасибо" nahimovv
Jane9226 (26.12.2013)
Непрочитано 26.12.2013, 01:31  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

nahimovv а нопы зачем? там вроде без паузы
Hives вне форума  
Непрочитано 26.12.2013, 01:51  
nahimovv
Заблокирован
 
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
nahimovv на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Для бряков и пошагать.
nahimovv вне форума  
Непрочитано 26.12.2013, 02:25  
Jane9226
Прописка
 
Регистрация: 26.10.2011
Сообщений: 122
Сказал спасибо: 53
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Jane9226 на пути к лучшему
По умолчанию Re: STM32 Изменить тактовую частоту во время выполнения

Цитата:
Не уверен? Не спорь, будешь выглядить глупым!
Подпись понравилась. Поняла свою ошибку. Перед тем как установить, нужно сразу сбросить... 0х07 = 00000111 естественно 0х07 | 0x00 даст 0х07 Что собственно я и делала. Еще раз спасибо.
Jane9226 вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реальное время выполнения инструкций STM32F4xx silabs Микроконтроллеры, АЦП, память и т.д 7 27.06.2012 21:41


Часовой пояс GMT +4, время: 05:40.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.