comparison Small_CPU/Src/baseCPU2.c @ 1024:9fabad6436a2 GasConsumption

GPIO sleep cleanup: During bringup of OSTC5 HW usage of new GPIO pins was introduced. To avoid not needed active GPIO pins during sleep some cleanup has been done (pins are only active if needed by new hardware, clocks deactivated during sleep etc.)
author Ideenmodellierer
date Tue, 29 Jul 2025 17:15:35 +0200
parents 67e3dbc4d212
children
comparison
equal deleted inserted replaced
1023:d268fc2b6052 1024:9fabad6436a2
283 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000); 283 HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / 1000);
284 HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK); 284 HAL_SYSTICK_CLKSourceConfig( SYSTICK_CLKSOURCE_HCLK);
285 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0); 285 HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
286 286
287 MX_RTC_init(); 287 MX_RTC_init();
288 GPIO_LEDs_VIBRATION_Init();
289 GPIO_GNSS_Init();
290 GPIO_new_DEBUG_Init(); // added 170322 hw 288 GPIO_new_DEBUG_Init(); // added 170322 hw
291 initGlobals(); 289 initGlobals();
292 290
293 /* printf("CPU2-RTE running...\n"); */ 291 /* printf("CPU2-RTE running...\n"); */
294 292
526 extInterfaceActive = externalInterface_isEnabledPower33(); 524 extInterfaceActive = externalInterface_isEnabledPower33();
527 externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF); 525 externalInterface_SwitchUART(EXT_INTERFACE_UART_OFF);
528 externalInterface_SwitchPower33(false); 526 externalInterface_SwitchPower33(false);
529 if (hasExternalClock()) 527 if (hasExternalClock())
530 SystemClock_Config_HSI(); 528 SystemClock_Config_HSI();
531 GPIO_LEDs_VIBRATION_Init();
532 sleep_prepare(); 529 sleep_prepare();
533 530
534 while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */ 531 while(time_elapsed_ms(shutdownTick,HAL_GetTick()) < 1000 ) /* delay shutdown till shutdown animation is finished */
535 { 532 {
536 HAL_Delay(10); 533 HAL_Delay(10);
537 } 534 }
538 shutdownTick = 0; 535 shutdownTick = 0;
539 scheduleSleepMode(); 536 scheduleSleepMode();
537
538 /* wakeup starts here */
540 if (hasExternalClock()) 539 if (hasExternalClock())
541 SystemClock_Config_HSE(); 540 SystemClock_Config_HSE();
542 EXTI_Wakeup_Button_DeInit(); 541 EXTI_Wakeup_Button_DeInit();
543 ADCx_Init(); 542 ADCx_Init();
544 GPIO_Power_MainCPU_Init(); 543 GPIO_Power_MainCPU_Init();
553 if(extInterfaceActive) 552 if(extInterfaceActive)
554 { 553 {
555 externalInterface_SwitchPower33(true); 554 externalInterface_SwitchPower33(true);
556 } 555 }
557 externalInterface_InitDatastruct(); 556 externalInterface_InitDatastruct();
558 MX_USART6_UART_Init(); 557 GPIO_Init_V2();
559 GNSS_Init(&GNSS_Handle, &huart6);
560 // EXTILine0_Button_DeInit(); not now, later after testing 558 // EXTILine0_Button_DeInit(); not now, later after testing
561 break; 559 break;
562 } 560 }
563 561
564 #ifdef DEBUG_RUNTIME 562 #ifdef DEBUG_RUNTIME
883 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *I2cHandle) { 881 void HAL_I2C_ErrorCallback(I2C_HandleTypeDef *I2cHandle) {
884 882
885 } 883 }
886 884
887 void sleep_prepare(void) { 885 void sleep_prepare(void) {
886
887 GPIO_InitTypeDef GPIO_InitStruct;
888
888 EXTI_Wakeup_Button_Init(); 889 EXTI_Wakeup_Button_Init();
889 890
890 compass_sleep(); 891 compass_sleep();
891 HAL_Delay(100); 892 HAL_Delay(100);
892 accelerator_sleep(); 893 accelerator_sleep();
894 895
895 I2C_DeInit(); 896 I2C_DeInit();
896 MX_SPI_DeInit(); 897 MX_SPI_DeInit();
897 MX_SPI3_DeInit(); 898 MX_SPI3_DeInit();
898 ADCx_DeInit(); 899 ADCx_DeInit();
899
900 GPIO_InitTypeDef GPIO_InitStruct;
901
902 __HAL_RCC_GPIOA_CLK_ENABLE();
903 __HAL_RCC_GPIOB_CLK_ENABLE();
904 __HAL_RCC_GPIOC_CLK_ENABLE();
905 __HAL_RCC_GPIOH_CLK_ENABLE();
906
907 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
908 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
909 GPIO_InitStruct.Pull = GPIO_NOPULL;
910 GPIO_InitStruct.Pin = GPIO_PIN_All;
911 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct);
912 #ifdef ENABLE_SLEEP_DEBUG
913 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */
914 #endif
915
916 /*
917 GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN);
918 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct);
919 */
920 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | EXT33V_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */
921
922 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct);
923
924 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | VIBRATION_CONTROL_PIN | LED_CONTROL_PIN_RED | LED_CONTROL_PIN_GREEN);
925 #ifdef ENABLE_SLEEP_DEBUG
926 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */
927 #endif
928 HAL_GPIO_Init( GPIOA, &GPIO_InitStruct);
929
930 GPIO_InitStruct.Pin = GPIO_PIN_All;
931 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct);
932
933 GPIO_Power_MainCPU_OFF();
934 900
935 if(GPIO_GetVersion() > 0) 901 if(GPIO_GetVersion() > 0)
936 { 902 {
937 GPIO_LED_GREEN_OFF(); 903 GPIO_LED_GREEN_OFF();
938 GPIO_LED_RED_OFF(); 904 GPIO_LED_RED_OFF();
939 GPIO_VIBRATION_OFF(); 905 GPIO_VIBRATION_OFF();
940 } 906 }
907
908 __HAL_RCC_GPIOA_CLK_ENABLE();
909 __HAL_RCC_GPIOB_CLK_ENABLE();
910 __HAL_RCC_GPIOC_CLK_ENABLE();
911 __HAL_RCC_GPIOH_CLK_ENABLE();
912
913 GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
914 GPIO_InitStruct.Speed = GPIO_SPEED_LOW;
915 GPIO_InitStruct.Pull = GPIO_NOPULL;
916 GPIO_InitStruct.Pin = GPIO_PIN_All;
917 HAL_GPIO_Init( GPIOH, &GPIO_InitStruct);
918
919 #ifdef ENABLE_SLEEP_DEBUG
920 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_3 | GPIO_PIN_8 | GPIO_PIN_9); /* debug */
921 #endif
922
923 #ifdef ENABLE_GNSS_INTERN
924 GPIO_InitStruct.Pin = GPIO_PIN_All ^ (GPS_POWER_CONTROL_PIN | GPS_BCKP_CONTROL_PIN);
925 #else
926 GPIO_InitStruct.Pin = GPIO_PIN_All;
927 #endif
928 HAL_GPIO_Init( GPIOB, &GPIO_InitStruct);
929
930 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( MAINCPU_CONTROL_PIN | CHARGE_OUT_PIN | EXT33V_CONTROL_PIN); /* power off & charger in & charge out & OSC32 & ext33Volt */
931 HAL_GPIO_Init( GPIOC, &GPIO_InitStruct);
932
933 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 ); /* could be added for debug purpose: | VIBRATION_CONTROL_PIN | LED_CONTROL_PIN_RED | LED_CONTROL_PIN_GREEN */
934 #ifdef ENABLE_SLEEP_DEBUG
935 GPIO_InitStruct.Pin = GPIO_PIN_All ^ ( GPIO_PIN_0 | GPIO_PIN_13 | GPIO_PIN_14); /* wake up button & debug */
936 #endif
937 HAL_GPIO_Init( GPIOA, &GPIO_InitStruct);
938
939 GPIO_Power_MainCPU_OFF();
940
941 #ifdef ENABLE_GNSS_INTERN 941 #ifdef ENABLE_GNSS_INTERN
942 if(GPIO_GetVersion() > 0) 942 if(GPIO_GetVersion() > 0)
943 { 943 {
944 GPIO_GPS_BCKP_ON(); // mH : costs 100µA in sleep - beware 944 GPIO_GPS_BCKP_ON(); // mH : costs 100µA in sleep - beware
945 /* GPIO_GPS_OFF(); will be done in transition sleep => deep sleep */ 945 /* GPIO_GPS_OFF(); will be done in transition sleep => deep sleep */
946 MX_USART6_UART_DeInit(); 946 MX_USART6_UART_DeInit();
947 } 947 }
948 #endif 948 #endif
949 #ifndef ENABLE_SLEEP_DEBUG 949 #ifndef ENABLE_SLEEP_DEBUG
950 /* 950 #ifndef ENABLE_GNSS_INTERN
951 __HAL_RCC_GPIOB_CLK_DISABLE(); 951 __HAL_RCC_GPIOB_CLK_DISABLE();
952 */ 952 #endif
953 #endif 953 #endif
954 __HAL_RCC_GPIOH_CLK_DISABLE(); 954 __HAL_RCC_GPIOH_CLK_DISABLE();
955 } 955 }
956 956
957 /* 957 /*