реклама на сайте
подробности

 
 
> Проблемы тактирования STM32VL Discovery., Слетает настройка системной частоты при PREDIV1 со значением 8 и выше.
mkru
сообщение Jan 18 2016, 12:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 31
Регистрация: 20-06-07
Пользователь №: 28 581



Всем доброго дня!
Взял отладку STM32VL Discovery (на STM32F100RBT6). Работаю с блоком RCC: беру частоту с внешнего кварца 8МГц (HSE) пропускаю через предделитель PREDIV1 и умножаю в блоке PLLMUL. Показания системной частоты SYSCLK снимаю осциллографом на выводе MCO (ножка PA8) см. рис.
Прикрепленное изображение

Так вот частота SYSCLK выдается предсказуемо до тех пор пока предделитель PREDIV1 установлен в значении от 1 до 7. А вот если PREDIV1 в значении от 8 и выше (до 16), то программа не выполняется до конца и зацикливается на строчке:
while (!(RCC->CR & RCC_CR_PLLRDY));// Ожидание готовности PLL.
В этот момент контроллер тактируется от внутреннего генератора (HSI), поэтому на выводе MCO вижу частоту 8МГц. В чем может быть проблема?

Вот сам код:

CODE

#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"

void init_PLL ( unsigned long int HSE_PREDIV,unsigned long int PLLMUL,unsigned long int HSI_OR_HSE)
{
// Проверяем тактируемся ли мы от HSI (), если мы уже сцеплины с HSI тогда можно начать подготовку двух других блоков HSE и PLL
if((RCC->CFGR&RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI)// МК тактируется не от HSI
{
RCC->CIR |= RCC_CIR_HSIRDYC; // сброс флага RCC_CR_HSIRDY
RCC->CR |= RCC_CR_HSION; // Запуск HSI
while (!(RCC->CR & RCC_CR_HSIRDY));// Ожидание готовности HSI.
RCC->CFGR &= ~(RCC_CFGR_SW_0|RCC_CFGR_SW_1); // Переключаем на HSI
while ((RCC->CFGR&RCC_CFGR_SWS) != RCC_CFGR_SWS_HSI); // Ожидание переключения на HSI.
}

RCC->CR &= ~RCC_CR_PLLON; // ВЫКЛЮЧАЕМ PLL.

if(HSI_OR_HSE){ //определяем что заводить в PLL
RCC->CFGR |= RCC_CFGR_PLLSRC_PREDIV1; // заводить в блок PLL HSE
RCC->CFGR2 = HSE_PREDIV; //заносим делитель
}
else
RCC->CFGR &= ~RCC_CFGR_PLLSRC_PREDIV1; // заводить в блок PLL HSI

RCC->CFGR &= ~RCC_CFGR_PLLMULL; // Очистить биты PLLMULL
RCC->CFGR |= PLLMUL; //Устанавливаем значение множителя PLLMULL
RCC->CIR |= RCC_CIR_PLLRDYC; // сброс флага RCC_CR_PLLRDY
RCC->CR |= RCC_CR_PLLON; // Запустить PLL.

while (!(RCC->CR & RCC_CR_PLLRDY));// Ожидание готовности PLL.

RCC->CFGR &=~RCC_CFGR_SW; // Очистить биты SW0 и SW1
RCC->CFGR |= RCC_CFGR_SW_PLL; //(Выбираем PLL источником для SYSCLK)

while ((RCC->CFGR&RCC_CFGR_SWS)!=RCC_CFGR_SWS_PLL); // Ожидание переключения на PLL.
}

int main(void) {
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // Разрешение тактирования I/O порта A ( 0x00000004 )
GPIOA->CRH = 0x0000000B; // Вывод PA8 в альтернативную функцию (CNF0= 0; CNF1= 1; MODE0= 0; MODE1= 1; )
RCC->CFGR |= RCC_CFGR_MCO_SYSCLK; // Выбрать ситемный тактовый сигнал ( 0x04000000 )

init_PLL ( RCC_CFGR2_PREDIV1_DIV7, RCC_CFGR_PLLMULL2, RCC_CFGR_PLLSRC_PREDIV1);

while (1){
};
}


Сообщение отредактировал IgorKossak - Jan 18 2016, 14:15
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!

Прикрепленные файлы
Прикрепленный файл  main.txt ( 2.08 килобайт ) Кол-во скачиваний: 3
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mkru   Проблемы тактирования STM32VL Discovery.   Jan 18 2016, 12:34
- - scifi   Цитата(mkru @ Jan 18 2016, 15:34) Так вот...   Jan 18 2016, 12:43
|- - mkru   Цитата(scifi @ Jan 18 2016, 15:43) Если д...   Jan 18 2016, 13:23
- - scifi   Можно ещё на питание посмотреть. PLL запитывается ...   Jan 18 2016, 14:49
|- - mkru   Цитата(scifi @ Jan 18 2016, 17:49) Можно ...   Jan 19 2016, 05:02
- - ViKo   1. Можно запустить МК, не дожидаясь захвата частот...   Jan 19 2016, 07:27
|- - mkru   Цитата(ViKo @ Jan 19 2016, 10:27) 1. Можн...   Jan 19 2016, 11:16
- - ViKo   Закомментируйте строку while (!(RCC->CR ...   Jan 19 2016, 11:34
|- - mkru   Цитата(ViKo @ Jan 19 2016, 14:34) Закомме...   Jan 19 2016, 12:52
|- - scifi   Цитата(ViKo @ Jan 19 2016, 14:34) Закомме...   Jan 19 2016, 12:56
- - ViKo   В руководстве так написано: ЦитатаBits 1:0 SW: Sys...   Jan 19 2016, 13:30
- - ViKo   Нашел запись. ЦитатаA switch from one clock source...   Jan 19 2016, 14:31
- - AlanDrakes   Посмотрите в Reference Manual, секция 6, пункт 6.2...   Jan 19 2016, 14:43
- - mkru   Цитата(AlanDrakes @ Jan 19 2016, 17:43) П...   Jan 20 2016, 06:08
- - scifi   Цитата(mkru @ Jan 20 2016, 09:08) Все так...   Jan 20 2016, 07:07
- - mkru   Цитата(scifi @ Jan 20 2016, 10:07) Горазд...   Jan 20 2016, 12:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 21:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01438 секунд с 7
ELECTRONIX ©2004-2016