I was looking to port the code to a board with no external oscillator, I figured out the code changes and post them here if anyone else is interested:
--- a/targets/stm32/jshardware.c +++ b/targets/stm32/jshardware.c @@ -2487,13 +2487,14 @@ bool jshSleep(JsSysTime timeUntilWake) { [#endif](https://forum.espruino.com/search/?q=%23endif) [#endif](https://forum.espruino.com/search/?q=%23endif) // recover oscillator - RCC_HSEConfig(RCC_HSE_ON); - if( RCC_WaitForHSEStartUp() == SUCCESS) { + RCC_HSICmd(ENABLE); +// RCC_HSEConfig(RCC_HSE_ON); +// if( RCC_WaitForHSEStartUp() == SUCCESS) { RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); while(RCC_GetSYSCLKSource() != 0x08); - } +// } RTC_WaitForSynchro(); // make sure any RTC reads will be done [#ifdef](https://forum.espruino.com/search/?q=%23ifdef) USB jshSetUSBPower(true); @@ -2916,14 +2917,14 @@ unsigned int jshSetSystemClock(JsVar *options) { if (pclk2<-1) return 0; // Run off external clock - 8Mhz - while we configure everything - RCC_SYSCLKConfig(RCC_SYSCLKSource_HSE); + RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI); // set latency if (latency!=255) FLASH_SetLatency(latency); if (pclk1>=0) RCC_PCLK1Config(pclk1); if (pclk2>=0) RCC_PCLK2Config(pclk2); // update PLL RCC_PLLCmd(DISABLE); - RCC_PLLConfig(RCC_PLLSource_HSE, m, n, p, q); + RCC_PLLConfig(RCC_PLLSource_HSI, m, n, p, q); RCC_PLLCmd(ENABLE); while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) {} RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
and
--- a/targetlibs/stm32f4/lib/system_stm32f4xx.c +++ b/targetlibs/stm32f4/lib/system_stm32f4xx.c @@ -256,7 +256,7 @@ // SYSCLK = PLL_VCO / PLL_P [#define](https://forum.espruino.com/search/?q=%23define) PLL_M 8 -#define PLL_Q 7 +#define PLL_Q 4 [#if](https://forum.espruino.com/search/?q=%23if) defined (STM32F40_41xxx) [#define](https://forum.espruino.com/search/?q=%23define) PLL_N 336 @@ -269,8 +269,8 @@ [#endif](https://forum.espruino.com/search/?q=%23endif) /* STM32F427_437x || STM32F429_439xx */ [#if](https://forum.espruino.com/search/?q=%23if) defined (STM32F401xx) // 84Mhz -#define PLL_N 336 -#define PLL_P 4 +#define PLL_N 84 +#define PLL_P 2 [#endif](https://forum.espruino.com/search/?q=%23endif) /* STM32F401xx */ [#if](https://forum.espruino.com/search/?q=%23if) defined (STM32F411xx) // 96Mhz @@ -499,29 +499,29 @@ static void SetSysClock(void) /******************************************************************************/ /* PLL (clocked by HSE) used as System clock source */ /******************************************************************************/ - __IO uint32_t StartUpCounter = 0, HSEStatus = 0; +// __IO uint32_t StartUpCounter = 0, HSEStatus = 0; /* Enable HSE */ - RCC->CR |= ((uint32_t)RCC_CR_HSEON); +// 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) - { +// 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) +// { /* Select regulator voltage output Scale 1 mode */ RCC->APB1ENR |= RCC_APB1ENR_PWREN; PWR->CR |= PWR_CR_VOS; @@ -547,7 +547,7 @@ static void SetSysClock(void) /* Configure the main PLL */ RCC->PLLCFGR = PLL_M | (PLL_N << 6) | (((PLL_P >> 1) -1) << 16) | - (RCC_PLLCFGR_PLLSRC_HSE) | (PLL_Q << 24); + (RCC_PLLCFGR_PLLSRC_HSI) | (PLL_Q << 24); /* Enable the main PLL */ RCC->CR |= RCC_CR_PLLON;
@Mark3072 started
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
I was looking to port the code to a board with no external oscillator, I figured out the code changes and post them here if anyone else is interested:
and