![]() |
|
|
Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip. |
![]() |
|
Опции темы | Опции просмотра |
![]() |
#1 |
Senior Member
|
![]()
Как не пытался изменять значение PLLMUL, на выходе МСО PLLDIV2 всегда 36 МГц. Может глянете код, что не так? Пробовал разные источники, вроде все верно, а частота не меняется.
№1 Код:
static void SetSysClock(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSE */ RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) != RESET) { HSEStatus = (uint32_t)0x01; } else { HSEStatus = (uint32_t)0x00; } if (HSEStatus == (uint32_t)0x01) { /* Enable Prefetch Buffer and set Flash Latency */ FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1; /* HCLK = SYSCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2; /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL2);//9 /* Enable PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Select PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL) { } } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } } Код:
static void InitRCC(void) { RCC_HSEConfig(RCC_HSE_ON); //Enable HSE while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) == RESET) ; //Waiting for HSE //Set Flash latency //FLASH->ACR |= FLASH_ACR_PRFTBE; //FLASH->ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY); //FLASH->ACR |= (uint32_t)((uint8_t)0x02); RCC_PREDIV1Config(RCC_PREDIV1_Div1);//PREDIV 1 Divider = 1 RCC_PLLConfig(RCC_PLLSource_PREDIV1,RCC_PLLMul_3);//Set PREDIV1 as source for PLL,And set PLLMUL=9 RCC_PLLCmd(ENABLE);//Enable PLL while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) ;//Waiting for PLL RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);//Set PLL as SYSCLK Soucre RCC_HSICmd(DISABLE);//Disable HSI } |
![]() |
![]() |
![]() |
#2 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
ох.... чую руку КубаМх
![]() а по своему... взять даташит и настроить PLL? там получится всего 3-4 строчки кода..... вбить нужные значения в регистры, включить PLL и подождать когда оно включится... |
![]() |
![]() |
![]() |
#3 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
глянул мануал
Цитата:
![]() |
|
![]() |
![]() |
![]() |
#5 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
а это делали ?
Цитата:
|
|
![]() |
![]() |
![]() |
#7 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#8 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#9 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#10 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
|
![]() Цитата:
![]() Вот что получилось в итоге: Код:
static void SetSysClock(void) { __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* SYSCLK, HCLK, PCLK2 and PCLK1 configuration ---------------------------*/ /* Enable HSE */ RCC->CFGR = 0; RCC->CR |= ((uint32_t)RCC_CR_HSEON); /* Wait till HSE is ready and if Time out is reached exit */ do { HSEStatus = RCC->CR & RCC_CR_HSERDY; StartUpCounter++; } while((HSEStatus == 0) && (StartUpCounter != HSE_STARTUP_TIMEOUT)); if ((RCC->CR & RCC_CR_HSERDY) != RESET) { HSEStatus = (uint32_t)0x01; } else { HSEStatus = (uint32_t)0x00; } if (HSEStatus == (uint32_t)0x01) {RCC->CR &= 0xFEFFFFFF;//Disable PLL /* Enable Prefetch Buffer and set Flash Latency */ FLASH->ACR = FLASH_ACR_PRFTBE | FLASH_ACR_LATENCY_1; /* HCLK = SYSCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1; /* PCLK2 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1; /* PCLK1 = HCLK */ RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV1;//DIV2 ************ /* PLL configuration: PLLCLK = HSE * 9 = 72 MHz */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL)); RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL2);//9 //RCC->CFGR &= 0xFFC3FFFF; /* Enable PLL */ RCC->CR |= RCC_CR_PLLON; /* Wait till PLL is ready */ while((RCC->CR & RCC_CR_PLLRDY) == 0) { } /* Select PLL as system clock source */ RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW)); RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL; /* Wait till PLL is used as system clock source */ while ((RCC->CFGR & (uint32_t)RCC_CFGR_SWS) != (uint32_t)RCC_CFGR_SWS_PLL) { } } else { /* If HSE fails to start-up, the application will have wrong clock configuration. User can add here some code to deal with this error */ } } |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#13 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#14 | |
Super Moderator
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 7,086
Вес репутации: 6158/182 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Кстати, неплохо бы анализировать, удалось ли запустить генератор. Какой-то (хотя бы диагностический) выход из этих мертвых while. |
|
![]() |
![]() |
![]() |
#15 | |
Senior Member
|
![]() Цитата:
Если кварц замкнуть пальцем - сигнал на МСО пропадает. |
|
![]() |
![]() |
![]() |
#16 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
отголоски использования готовых шаблонов....
а нужно "книжку" иногда читать, а лучше- всегда под рукой держать и читать Цитата:
![]() |
|
![]() |
![]() |
![]() |
#17 | ||
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
![]() а так.... в некоторых камнях в качестве источника клоков для некоторой переферии можно HSI выбирать |
||
![]() |
![]() |
![]() |
#18 |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
грустно... современные разработчики всё дальше от железа..... понатыкали готовых контроллеров и дали библиотеки готовые.... теперь уже и разбираться на хардварном уровне ни в чём не надо....
я, в своё время, программно реализовывал I2C ![]() пока на готовый контроллер ( параллельная шина <-> I2C) не наткнулся ![]() |
![]() |
![]() |
![]() |
#19 |
Senior Member
|
![]()
Вся эта коляска затевалась для снижения энергопотребления - снизить частоту, а для ускорения вычислений использовать FPU.
Сейчас система в режиме измерения потребляет 15 мА, в режиме записи 30. Ну и отказ от внешнего АЦП в пользу внутреннего сигма-дельта. Как-то так ![]() |
![]() |
![]() |
![]() |
#20 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#21 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#22 |
Senior Member
|
![]() |
![]() |
![]() |
![]() |
#23 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#24 | |
Senior Member
|
![]() Цитата:
![]() |
|
![]() |
![]() |
![]() |
#25 | |
Senior Member
Регистрация: 09.11.2012
Адрес: SPB
Возраст: 52
Сообщений: 2,400
Вес репутации: 1008/64 ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]()
дык может
Цитата:
![]() ещё и LSI отключить... и вообще всё что с часами связано.... позапрятить ненужные прерывания.... отключить не нужную перефирию(иногда по резету она по дефолту включается) Последний раз редактировалось SergP01; 20.03.2020 в 13:57. |
|
![]() |
![]() |
![]() |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
Опции темы | |
Опции просмотра | |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
dspic33ep понизить частоту | jammer | Продукция MICROCHIP | 3 | 08.04.2016 22:38 |