enable HSI after waking from stop mode so ADC functions properly

pull/4689/head
Mike Fiore 2017-06-16 10:52:44 -05:00 committed by adbridge
parent 7d8c2e37b3
commit 0440023a4a
1 changed files with 22 additions and 9 deletions

View File

@ -218,18 +218,18 @@ void xdot_enter_stop_mode() {
HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI); HAL_PWR_EnterSTOPMode(PWR_LOWPOWERREGULATOR_ON, PWR_STOPENTRY_WFI);
RCC_ClkInitTypeDef RCC_ClkInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_OscInitTypeDef RCC_OscInitStruct; RCC_OscInitTypeDef HSERCC_OscInitStruct;
/* Enable HSE and HSI48 oscillators and activate PLL with HSE as source */ /* Enable HSE and HSI48 oscillators and activate PLL with HSE as source */
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI; HSERCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI;
RCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 24 MHz xtal on OSC_IN/OSC_OUT */ HSERCC_OscInitStruct.HSEState = RCC_HSE_ON; /* External 24 MHz xtal on OSC_IN/OSC_OUT */
RCC_OscInitStruct.HSIState = RCC_HSI_OFF; HSERCC_OscInitStruct.HSIState = RCC_HSI_OFF;
// SYSCLK = 32 MHz ((24 MHz * 4) / 3) // SYSCLK = 32 MHz ((24 MHz * 4) / 3)
// USBCLK = 48 MHz ((24 MHz * 4) / 2) --> USB OK // USBCLK = 48 MHz ((24 MHz * 4) / 2) --> USB OK
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; HSERCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; HSERCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4; HSERCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL4;
RCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3; HSERCC_OscInitStruct.PLL.PLLDIV = RCC_PLL_DIV3;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { if (HAL_RCC_OscConfig(&HSERCC_OscInitStruct) != HAL_OK) {
printf("OSC initialization failed - initiating soft reset\r\n"); printf("OSC initialization failed - initiating soft reset\r\n");
NVIC_SystemReset(); NVIC_SystemReset();
} }
@ -245,6 +245,19 @@ void xdot_enter_stop_mode() {
NVIC_SystemReset(); NVIC_SystemReset();
} }
/* Enable the HSI for ADC peripherals */
RCC_OscInitTypeDef HSIRCC_OscInitStruct;
HAL_RCC_GetOscConfig(&HSIRCC_OscInitStruct);
if ( HSIRCC_OscInitStruct.HSIState != RCC_HSI_ON ) {
HSIRCC_OscInitStruct.HSIState = RCC_HSI_ON;
HSIRCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
HSIRCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
HAL_StatusTypeDef ret = HAL_RCC_OscConfig(&HSIRCC_OscInitStruct);
if ( ret != HAL_OK ) {
printf("HSI initialization failed - ADC will not function properly\r\n");
}
}
SystemCoreClockUpdate(); SystemCoreClockUpdate();
// clear wakeup flag in power control register // clear wakeup flag in power control register