Страница 1 из 1

PLL для STM32F205 не взлетает

Добавлено: Чт ноя 28, 2013 15:28:30
FPGAlover
Добрый день! у меня почему то не программируется PLL. Как бы я его не программировал, с выхода имею неприменные 80мгц минус примерноерно 3%.
кварц запаян на 16мгц. Попытки отключить часть кода, ответственные за его программирование приводят к тому же результату.
Этот код выполняется первым в main, однако написано это в рамках примера от STM (не исключаю, что в каком ни будь стартапе что то имеется по этому поводу. например хитрый лок или обновление по прерыванию)
Подскажите, пожалуйста, где я не прав ? :)
//настройка системы тактирования
RCC_ClockSecuritySystemCmd(ENABLE);
RCC_HSEConfig(RCC_HSE_ON);
while((RCC->CR & RCC_CR_HSERDY) == 0) {;}
RCC_PLLCmd(DISABLE);
while((RCC->CR & RCC_CR_PLLRDY) == 1) {;}
RCC_PLLConfig( RCC_PLLSource_HSE, 8 , 192 ,4, 8 ); //M N P Q
RCC_PLLCmd(ENABLE);
while((RCC->CR & RCC_CR_PLLRDY) == 0) {;}
FLASH_SetLatency(FLASH_Latency_3);
FLASH->ACR |= FLASH_ACR_PRFTEN;
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE);
// пробрасывание частот на MCO1 и MCO2 чтобы пощупать осциллографом
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOC , DISABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOC, &GPIO_InitStructure);
RCC_MCO2Config(RCC_MCO2Source_PLLCLK,RCC_MCO2Div_4);

RCC_AHB1PeriphResetCmd(RCC_AHB1Periph_GPIOA , DISABLE);
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA , ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
RCC_MCO1Config(RCC_MCO1Source_HSE,RCC_MCO1Div_4);
// дальше ничего не выполняем ,бо чистота эксперимента ...
while (1) { };

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 12:23:52
FPGAlover
Создал проект с нуля - заработало как надо...
где же грабли?
Пожалуйста, подскажите варианты, почему это может быть? Возможно ли PLL заморозить, или ввести в состояние индифферентности по отношению к программирующему воздействию?
Или у STM принято по какому ни будь злобному прерыванию, прописанному в стартапе следить за частотой и поправлять.

А пока буду ковырять стартап... познавать армовский ассемблер :shock:

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 12:39:13
FPGAlover
поковырял... а там то и ковырять оказалось нечего.... дефолтные обработчики прерываний и таблица векторов из них слеплена....
и все же... где же собака порылась?

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 14:15:47
ibiza11
Вы бы проект проблемный выложили, а то проект пересоздали, код заработал. Получается Ваш код рабочий. А как ответить где собака порылась, если даже порыться не в чем!?
С уважением.

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 14:50:16
FPGAlover
В общем, сразу после программирования PLL своими значениями (PLLM=8 PLLN=192 PLLP=4), читаю из него же PLLM=25 PLLN=240 PLLP=2 весьма осмысленные константы для разгонки до 120 МГЦ от кварца 25Мгц
Проект - пример от ST виртуального ком порта качал отсюда http://emproj.com/Documents/ARM/Applica ... ce_lib.zip.
лежит в папке Project\USB_Device_Examples\VCP\EWARM
работаю в IAR.
использую следующие дефайны:
USE_STDPERIPH_DRIVER
STM32F2XX
USE_STM322xG_EVAL
USE_USB_OTG_FS
Вроде бы исчерпывающе :)

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 15:07:23
FPGAlover
Нашел таки :) дело было в "system_stm32f2xx". там все эти константы прописаны и systeminit вызывается из Reset_Handler
правда все равно остается недопонимание, почему перепрограммировать из майна не удается...

Re: PLL для STM32F205 не взлетает

Добавлено: Пт ноя 29, 2013 16:13:02
balmer
В демках STM32L есть переключение частоты. Но там сначала переключают на HSI clock. Потом уже перепрограммируют HSE/PLL.