Например TDA7294

Форум РадиоКот • Просмотр темы - PLL на STM32F103RCT
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс дек 28, 2025 08:55:30

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: PLL на STM32F103RCT
СообщениеДобавлено: Ср май 21, 2014 14:58:31 
Первый раз сказал Мяу!

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб дек 28, 2013 20:31:22
Сообщений: 35
Рейтинг сообщения: 0
Добрый день. Настраиваю PLL от внутреннего осциллятора(HSI), но сколько бы я не менял коэффициенты, частота не меняется. Пробовал проверять и миганием дидов, и просмотром частоты на выходe MCO. Привожу свой код. Найди пожалуйста ошибку.
Код:
RCC->CR |= RCC_CR_HSION;
while(!(RCC_CR_HSIRDY));

RCC->CFGR&= ~(RCC_CFGR_PPRE2|RCC_CFGR_PPRE1|RCC_CFGR_HPRE);
RCC->CFGR|=(RCC_CFGR_PPRE1_2|RCC_CFGR_PPRE2_2|RCC_CFGR_HPRE_3);

FLASH->ACR |= FLASH_ACR_PRFTBE;
FLASH->ACR |= FLASH_ACR_LATENCY_2; 

RCC->CFGR&= ~(RCC_CFGR_PLLMULL|RCC_CFGR_PLLSRC);
RCC->CFGR|=RCC_CFGR_PLLMULL_1;
RCC->CR|=RCC_CR_PLLON;
while((RCC->CR & RCC_CR_PLLRDY) == 0){};
RCC->CFGR |= RCC_CFGR_SW_1;


RCC->APB2ENR |= (RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPAEN);
GPIOA->CRH|=(GPIO_CRH_MODE8|GPIO_CRH_CNF8_1);

RCC->CFGR|=RCC_CFGR_MCO_2;




Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PLL на STM32F103RCT
СообщениеДобавлено: Ср май 21, 2014 16:13:02 
Опытный кот
Аватар пользователя

Карма: 9
Рейтинг сообщений: 61
Зарегистрирован: Пт ноя 16, 2007 11:21:37
Сообщений: 830
Рейтинг сообщения: 0
Какую частоту хотите получить на выходе PLL?
ОТ внутреннего генератора получить частоту больше 64МГц не получится так как на вход PLL поступает 4МГц.
Код:
//********************************************************************************
//Function: настройкa системы тактирования контроллера STM32F103xx              //
//          источник сигнала - внутренний RC генератор через умножитель         //
//********************************************************************************
void InitClk()
{
  //Частота  SystemCoreClock выше 24 MHz - разрешить буфер предварительной выборки FLASH
  FLASH->ACR|=  FLASH_ACR_PRFTBE;        //Включить буфер предварительной выборки
  FLASH->ACR&= ~FLASH_ACR_LATENCY;       //Очистить FLASH_ACR_LATENCY
  FLASH->ACR |= FLASH_ACR_LATENCY_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_PLLMULL12;      //Коефициент умножения = 12
  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
  //Настроить делитель для шины APB1
  RCC->CFGR &= ~RCC_CFGR_PPRE1;          //Очистка битов предделителя "APB1 Prescaler"
  RCC->CFGR |=  RCC_CFGR_PPRE1_DIV2;     //Установить "APB1 Prescaler" равным 2

  //Настроить делитель для ADC
  RCC->CFGR &= ~CFGR_ADCPRE;             //Очистка битов предделителя "ADC Prescaler"
  RCC->CFGR |=  CFGR_ADCPRE_DIV4;        //Установить "ADC Prescaler" равным 4

}


Вложения:
Тактирование от HSI RC.JPG [57.63 KiB]
Скачиваний: 492
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PLL на STM32F103RCT
СообщениеДобавлено: Ср май 21, 2014 16:40:31 
Первый раз сказал Мяу!

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб дек 28, 2013 20:31:22
Сообщений: 35
Рейтинг сообщения: 0
Мне и не нужно больше 64. Мне нужно чтобы она хотябы как то менялась. И после этого как на mco выводить? Sysclk или pll на mco?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PLL на STM32F103RCT
СообщениеДобавлено: Ср май 21, 2014 20:52:38 
Первый раз сказал Мяу!

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб дек 28, 2013 20:31:22
Сообщений: 35
Рейтинг сообщения: 0
Как проверить? Верна ли настройка?


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: PLL на STM32F103RCT
СообщениеДобавлено: Чт май 22, 2014 01:01:35 
Первый раз сказал Мяу!

Карма: 2
Рейтинг сообщений: 0
Зарегистрирован: Сб дек 28, 2013 20:31:22
Сообщений: 35
Рейтинг сообщения: 0
Не работает почему то данный вариант. Проверяю светодиодом. Он не моргает чаще


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: PLL на STM32F103RCT
СообщениеДобавлено: Пн май 26, 2014 16:50:53 
Встал на лапы

Зарегистрирован: Чт янв 08, 2009 22:06:13
Сообщений: 85
Откуда: Киев
Рейтинг сообщения: 0
Примерно так:

void InitClk()
{
RCC->CR |= RCC_CR_HSION; //Включить генератор HSI
while((RCC->CR & RCC_CR_HSIRDY)==0) {} //Ожидание готовности HSI
//
//Настройка 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_PLLMULL2; //Коефициент умножения
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_DIV1; //Установить "AHB Prescaler"
//
//Настроить делитель для шины APB1
RCC->CFGR &= ~RCC_CFGR_PPRE1; //Очистка битов предделителя "APB1 Prescaler"
RCC->CFGR |= RCC_CFGR_PPRE1_DIV1; //Установить "APB1 Prescaler"
//
//Настроить делитель для шины APB2
RCC->CFGR &= ~RCC_CFGR_PPRE2; //Очистка битов предделителя "APB2 Prescaler"
RCC->CFGR |= RCC_CFGR_PPRE2_DIV1; //Установить "APB2 Prescaler"
//
//Настроить делитель для ADC
RCC->CFGR &= ~RCC_CFGR_ADCPRE; //Очистка битов предделителя "ADC Prescaler"
RCC->CFGR |= RCC_CFGR_ADCPRE_DIV2; //Установить "ADC Prescaler" равным 2
//
//Настроить делитель для шины USB
RCC->CFGR &= ~RCC_CFGR_USBPRE; //Предделитель для USB равен 1
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: PLL на STM32F401C-Discovery
СообщениеДобавлено: Ср сен 03, 2014 19:09:46 
Первый раз сказал Мяу!

Зарегистрирован: Сб мар 29, 2014 18:04:50
Сообщений: 27
Рейтинг сообщения: 0
Всем доброго времени суток!

Столкнулся с похожей проблемой; Использую CooCox CoIDE и отладочную плату STM32F401C-Discovery;

Код:

void PLL_init(void)
{
   RCC_DeInit();

   RCC_PLLCmd(DISABLE);

   while(RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);

   RCC_HCLKConfig(RCC_SYSCLK_Div1);

   RCC_PCLK1Config(RCC_HCLK_Div2);
   RCC_PCLK2Config(RCC_HCLK_Div1);

   RCC_PLLConfig(RCC_PLLSource_HSI, 16, 336, 4, 7);

   RCC_PLLCmd(ENABLE);

   while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);

   RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

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



Уважаемые знатоки, прошу ткнуть носом в ошибку!
Заранее спасибо!

P.S. Если быть более точным, то микроконтроллер виснет после
Код:
  RCC->CFGR = tmpreg;
(последняя команда "RCC_SYSCLKConfig" в "stm32f4xx_rcc.с")

Спойлерфункция RCC_SYSCLKConfig из stm32f4xx_rcc.с;

Код:

void RCC_SYSCLKConfig(uint32_t RCC_SYSCLKSource)
{
  uint32_t tmpreg = 0;

  /* Check the parameters */
  assert_param(IS_RCC_SYSCLK_SOURCE(RCC_SYSCLKSource));

  tmpreg = RCC->CFGR;

  /* Clear SW[1:0] bits */
  tmpreg &= ~RCC_CFGR_SW;

  /* Set SW[1:0] bits according to RCC_SYSCLKSource value */
  tmpreg |= RCC_SYSCLKSource;

  /* Store the new value */
  RCC->CFGR = tmpreg;
}



P.P.S:
1) Не важно какой источник у ФАПЧ - внешний кварц или внутренний RC.
2) Параметры, использующиеся для настройки ФАПЧ, тоже не играют значения - результат одинаковый.
3) После этого (см. скрин [отладчик + дисассемблер]) мк "уходит в глубочайший запой" и не на что не отвечает.

Вложение:
Комментарий к файлу: Скрин
Снимок.PNG [220.16 KiB]
Скачиваний: 736


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


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

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y