Skip to content

Commit 1403dfc

Browse files
committed
[XDOT_L151CC] enable HSI after waking from stop mode so ADC functions properly
1 parent 226af54 commit 1403dfc

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/xdot_low_power.c

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -218,18 +218,18 @@ void xdot_enter_stop_mode() {
218218
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
219219

220220
RCC_ClkInitTypeDef RCC_ClkInitStruct;
221-
RCC_OscInitTypeDef RCC_OscInitStruct;
221+
RCC_OscInitTypeDef HSERCC_OscInitStruct;
222222
/* Enable HSE and HSI48 oscillators and activate PLL with HSE as source */
223-
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;
224-
RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 24 MHz xtal on OSC_IN/OSC_OUT */
225-
RCC_OscInitStruct.HSIState = RCC_HSI_OFF;
223+
HSERCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;
224+
HSERCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 24 MHz xtal on OSC_IN/OSC_OUT */
225+
HSERCC_OscInitStruct.HSIState = RCC_HSI_OFF;
226226
// SYSCLK = 32 MHz ((24 MHz * 4) / 3)
227227
// USBCLK = 48 MHz ((24 MHz * 4) / 2) --> USB OK
228-
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
229-
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
230-
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;
231-
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
232-
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) {
228+
HSERCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
229+
HSERCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
230+
HSERCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;
231+
HSERCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
232+
if (HAL_RCC_OscConfig(&HSERCC_OscInitStruct) != HAL_OK) {
233233
printf("OSC initialization failed - initiating soft reset\r\n");
234234
NVIC_SystemReset();
235235
}
@@ -245,6 +245,19 @@ void xdot_enter_stop_mode() {
245245
NVIC_SystemReset();
246246
}
247247

248+
/* Enable the HSI for ADC peripherals */
249+
RCC_OscInitTypeDef HSIRCC_OscInitStruct;
250+
HAL_RCC_GetOscConfig(&HSIRCC_OscInitStruct);
251+
if ( HSIRCC_OscInitStruct.HSIState != RCC_HSI_ON ) {
252+
HSIRCC_OscInitStruct.HSIState = RCC_HSI_ON;
253+
HSIRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
254+
HSIRCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
255+
HAL_StatusTypeDef ret = HAL_RCC_OscConfig(&HSIRCC_OscInitStruct);
256+
if ( ret != HAL_OK ) {
257+
printf("HSI initialization failed - ADC will not function properly\r\n");
258+
}
259+
}
260+
248261
SystemCoreClockUpdate();
249262

250263
// clear wakeup flag in power control register

0 commit comments

Comments
 (0)