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

 
 
> STM32 и его RCC, почему так происходит
011119xx
сообщение Jan 19 2011, 05:02
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 381
Регистрация: 5-07-05
Из: Уфа
Пользователь №: 6 544



За изучение STM32 я взялся совсем недавно. Как и полагается собрал отладочную плату на STM32F103RET6 по прилагаемой схеме. В качестве отладчика использую J-Link v7, в качестве среды Keil mVision 4 (конечно не последней версии). Сделал простейший проект, основную часть программы привожу, к PC3 подключил светодиод через резистор к + питания:

Код
#include "stm32f10x.h"

ErrorStatus HSEStartUpStatus;
GPIO_InitTypeDef GPIO_InitStructure;

void RCC_Configuration(void)
{  
    // Сброс системы RCC (for debug purpose)
      RCC_DeInit();
      // Разрешение HSE
      RCC_HSEConfig(RCC_HSE_ON);
      // Ожидание готовности HSE
      HSEStartUpStatus = RCC_WaitForHSEStartUp();

      if(HSEStartUpStatus == SUCCESS)                        // Если HSE готов, то
      {
            // HCLK = SYSCLK
            RCC_HCLKConfig(RCC_SYSCLK_Div1);
            // PCLK2 = HCLK
            RCC_PCLK2Config(RCC_HCLK_Div1);
            // PCLK1 = HCLK/2
            RCC_PCLK1Config(RCC_HCLK_Div2);
            // PLLCLK = 8 МГц * 9 = 72 МГц
            RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
             // Разрешение PLL
            RCC_PLLCmd(ENABLE);
             // Ожидание готовности PLL
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
            {}
            // Выбор PLL как источника системного тактирования
            RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
            // Ожидание готовности PLL для использования как источника системного тактирования
            while(RCC_GetSYSCLKSource() != 0x08)
            {}
      }
}

int main(void)
{
      RCC_Configuration();                           

      RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);

      GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_3;
      GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
      GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
      GPIO_Init(GPIOC, &GPIO_InitStructure);                

    while(1)
    {
            GPIO_SetBits( GPIOC, GPIO_Pin_3);
        GPIO_ResetBits( GPIOC, GPIO_Pin_3);
    }
}


В общем запускаю программу на выполнение по шагам. В результате вижу, что HSE не готов, не хочет включаться. Тем не менее, светодиод загорается. Много над этим думал ... В результате пришел к выводу, что кварц какой-то не совсем рабочий и решил его заменить. Поставил другой, на 6 МГц (другого на 8 МГц под рукой не оказалось). Запустил программу на выполнение по шагам. Теперь HSE запускается, бит готовности выставляется, но снова возникли проблемы уже в другом месте. Оказалось, что теперь не запускается PLL и программа зациклилась тут, естественно, что светодиод не загорается:

Код
             // Ожидание готовности PLL
            while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
            {}


Долго мучился над этой проблемой, но так и не решил. Все выключил, потом решил включить отладочную плату со снятым отладчиком и в результате светодиод загорелся, что свидетельствует о том, что зацикливания не произошло и PLL все же работает.

Значит получается, что это отладчик не дает запускаться PLL?

Пробовал менять функцию RCC_Configuration на такую, то есть запускать PLL от HSI:

Код
void RCC_Configuration(void)
{  
    // Сброс системы RCC (for debug purpose)
      RCC_DeInit();
      // Разрешение HSE
      RCC_HSEConfig(RCC_HSE_ON);
      // Ожидание готовности HSE
      HSEStartUpStatus = RCC_WaitForHSEStartUp();

    // HCLK = SYSCLK
    RCC_HCLKConfig(RCC_SYSCLK_Div1);
    // PCLK2 = HCLK
    RCC_PCLK2Config(RCC_HCLK_Div1);
    // PCLK1 = HCLK/2
    RCC_PCLK1Config(RCC_HCLK_Div2);
    // PLLCLK = 8/2 МГц * 9 = 36 МГц
    RCC_PLLConfig(RCC_PLLSource_HSI_Div2, RCC_PLLMul_9);
    // Разрешение PLL
    RCC_PLLCmd(ENABLE);
    // Ожидание готовности PLL
    while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET)
    {}
    // Выбор PLL как источника системного тактирования
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
    // Ожидание готовности PLL для использования как источника системного тактирования
    while(RCC_GetSYSCLKSource() != 0x08)
    {}
}


При этом PLL запускается и светодиод горит.

Почему так происходит?

Сообщение отредактировал 011119xx - Jan 19 2011, 05:04
Прикрепленные файлы
Прикрепленный файл  _____Controller__STM32_.BMP ( 1.46 мегабайт ) Кол-во скачиваний: 34
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 011119xx   STM32 и его RCC   Jan 19 2011, 05:02
- - topkin   Вы начали пользоваться библиотекой, так там в файл...   Jan 19 2011, 05:55
|- - 011119xx   Цитата(topkin @ Jan 19 2011, 10:55) Вы на...   Jan 19 2011, 06:25
|- - topkin   Цитата(011119xx @ Jan 19 2011, 09:25) Вы ...   Jan 19 2011, 06:57
|- - 011119xx   Цитата(topkin @ Jan 19 2011, 11:57) Скоре...   Jan 19 2011, 08:02
- - sonycman   А может лучше не пользоваться всякими сомнительным...   Jan 19 2011, 15:15
|- - 011119xx   Цитата(sonycman @ Jan 19 2011, 20:15) А м...   Jan 20 2011, 04:19
|- - Danis   Цитата(011119xx @ Jan 20 2011, 07:19) Кто...   Jan 20 2011, 06:08
||- - 011119xx   Цитата(Danis @ Jan 20 2011, 11:08) Какая ...   Jan 20 2011, 06:13
|- - sonycman   Цитата(011119xx @ Jan 20 2011, 07:19) Да ...   Jan 20 2011, 10:35
- - 011119xx   Сейчас мы имеем ситуацию при которой, прямое управ...   Jan 21 2011, 04:37
|- - pr0m   Цитата(011119xx @ Jan 21 2011, 07:37) Обя...   Jan 22 2011, 20:22
- - 011119xx   Теория на практике не подтвердилась... Буфер предв...   Jan 24 2011, 05:01
|- - sonycman   Цитата(011119xx @ Jan 24 2011, 08:01) Но ...   Jan 24 2011, 05:40
- - 011119xx   Резистор на 1МОм пробовал ставить - не помогает. К...   Jan 24 2011, 06:50
- - 011119xx   На схеме отладочной платы STM3210E-EVAL стоит допо...   Jan 25 2011, 11:06
|- - shreck   Цитата(011119xx @ Jan 25 2011, 19:06) На ...   Jan 25 2011, 11:17
- - ViKo   Работает ли кварцевый генератор, вы можете увидеть...   Jan 25 2011, 11:20
|- - 011119xx   Цитата(ViKo @ Jan 25 2011, 16:20) Работае...   Jan 25 2011, 12:11
|- - ViKo   Цитата(011119xx @ Jan 25 2011, 14:11) В ч...   Jan 25 2011, 12:30
|- - 011119xx   Цитата(ViKo @ Jan 25 2011, 17:30) Та плат...   Jan 25 2011, 12:36
|- - ViKo   Цитата(011119xx @ Jan 25 2011, 14:36) Не ...   Jan 25 2011, 12:59
|- - sonycman   Цитата(ViKo @ Jan 25 2011, 15:59) ПМСМ, з...   Jan 25 2011, 14:56
- - 011119xx   Достал вчера мешочек в котором лежат кондеры на 22...   Jan 26 2011, 04:10
- - sonycman   Цитата(011119xx @ Jan 26 2011, 07:10) Дос...   Jan 26 2011, 07:34
- - ViKo   Цитата(sonycman @ Jan 26 2011, 09:34) Куп...   Jan 26 2011, 08:01


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

 


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


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