|
STM32 и его RCC, почему так происходит |
|
|
|
Jan 19 2011, 05:02
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
|
Jan 20 2011, 04:19
|

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

|
Цитата(sonycman @ Jan 19 2011, 20:15)  А может лучше не пользоваться всякими сомнительными библиотеками? Имхо, прямая работа с периферией много эффективнее, хотя и несколько сложнее в освоении... Да нет Вова, хорошая библиотека, очень облегчает освоение. В общем моя история продолжилась тем, что купил я новый кварц на 8 МГц и поставил его, прошил, запустил отладку по шагам. HSE запускается, PLL тоже, по крайней мере, не зацикливается там, где это происходило ранее. Но вот то что отображается в окне Peripherals/RCC вызывает недоумение. Флаг PLLRDY, то стоит, то не стоит. Частоты тактирования разных модулей (те что в самом низу окна) тоже как-то отображаются, то правильно, то не правильно... Думаю может у меня версия Keil какая-то глючная или может дело в J-Link... При отключенном отладчике зацикливания не происходит и светодиод начинает мигать (добавил задержки после установки и сброса бита PC3). Но вот что интересно, если произвести сброс кнопкой, то частота работы процессора уменьшается, светодиод начинает мигать медленнее... Кто что думает по этому поводу?
|
|
|
|
Сообщений в этой теме
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  Danis Цитата(011119xx @ Jan 20 2011, 07:19) Кто... Jan 20 2011, 06:08   011119xx Цитата(Danis @ Jan 20 2011, 11:08) Какая ... Jan 20 2011, 06:13 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|