From 51e5fbce7389e57fd7aacc8a9d443db64f3f8f90 Mon Sep 17 00:00:00 2001 From: imi415 Date: Wed, 25 Aug 2021 03:11:43 +0800 Subject: [PATCH] Implemented sleep mode. --- CMakeLists.txt | 1 + Core/Inc/FreeRTOSConfig.h | 5 + Core/Inc/main.h | 2 + Core/Inc/stm32f4xx_hal_conf.h | 2 +- Core/Inc/stm32f4xx_it.h | 1 + Core/Src/main.c | 85 +++++++++--- Core/Src/stm32f4xx_hal_msp.c | 50 +++++++ Core/Src/stm32f4xx_it.c | 15 +++ Core/Src/user_freertos_support.c | 23 ++++ Core/Src/user_power_mgmt.c | 57 +++++++- Makefile | 2 +- STM32F407ZE_MRB.ioc | 215 ++++++++++++++++++++----------- 12 files changed, 356 insertions(+), 102 deletions(-) create mode 100644 Core/Src/user_freertos_support.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 400ad55..fac91e4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ set(C_SOURCES "Core/Src/freertos.c" "Core/Src/stm32f4xx_hal_timebase_tim.c" "Core/Src/user_power_mgmt.c" + "Core/Src/user_freertos_support.c" ) # Copy them from Makefile set(ASM_SOURCES diff --git a/Core/Inc/FreeRTOSConfig.h b/Core/Inc/FreeRTOSConfig.h index 3a44573..19af429 100644 --- a/Core/Inc/FreeRTOSConfig.h +++ b/Core/Inc/FreeRTOSConfig.h @@ -166,9 +166,14 @@ standard names. */ /* USER CODE BEGIN Defines */ /* Section where parameter definitions can be added (for instance, to override default ones in FreeRTOS.h) */ +void vApplicationSleep(uint32_t xExpectedIdleTime); + /* Override CMSIS OS2 heap settings */ #define configAPPLICATION_ALLOCATED_HEAP 1 +#define configUSE_TICKLESS_IDLE 2 +#define portSUPPRESS_TICKS_AND_SLEEP( xExpectedIdleTime ) vApplicationSleep(xExpectedIdleTime) + /* USER CODE END Defines */ #endif /* FREERTOS_CONFIG_H */ diff --git a/Core/Inc/main.h b/Core/Inc/main.h index 9c56431..1a6eb96 100644 --- a/Core/Inc/main.h +++ b/Core/Inc/main.h @@ -58,6 +58,8 @@ void Error_Handler(void); /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ +#define LED1_Pin GPIO_PIN_9 +#define LED1_GPIO_Port GPIOF /* USER CODE BEGIN Private defines */ /* USER CODE END Private defines */ diff --git a/Core/Inc/stm32f4xx_hal_conf.h b/Core/Inc/stm32f4xx_hal_conf.h index a9892fa..f837ad5 100644 --- a/Core/Inc/stm32f4xx_hal_conf.h +++ b/Core/Inc/stm32f4xx_hal_conf.h @@ -188,7 +188,7 @@ #define USE_HAL_SPDIFRX_REGISTER_CALLBACKS 0U /* SPDIFRX register callback disabled */ #define USE_HAL_SMBUS_REGISTER_CALLBACKS 0U /* SMBUS register callback disabled */ #define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ -#define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ +#define USE_HAL_TIM_REGISTER_CALLBACKS 1U /* TIM register callback enabled */ #define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ #define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ #define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ diff --git a/Core/Inc/stm32f4xx_it.h b/Core/Inc/stm32f4xx_it.h index 239c07b..fd9b71c 100644 --- a/Core/Inc/stm32f4xx_it.h +++ b/Core/Inc/stm32f4xx_it.h @@ -53,6 +53,7 @@ void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void DebugMon_Handler(void); +void TIM6_DAC_IRQHandler(void); void TIM7_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index c9d93d0..2ccf21a 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -46,6 +46,8 @@ /* Private variables ---------------------------------------------------------*/ RTC_HandleTypeDef hrtc; +TIM_HandleTypeDef htim6; + UART_HandleTypeDef huart1; SRAM_HandleTypeDef hsram1; @@ -75,6 +77,7 @@ static void MX_GPIO_Init(void); static void MX_RTC_Init(void); static void MX_USART1_UART_Init(void); static void MX_FSMC_Init(void); +static void MX_TIM6_Init(void); void StartDefaultTask(void *argument); /* USER CODE BEGIN PFP */ @@ -117,6 +120,7 @@ int main(void) MX_RTC_Init(); MX_USART1_UART_Init(); MX_FSMC_Init(); + MX_TIM6_Init(); /* USER CODE BEGIN 2 */ // Define heap region for heap_5. @@ -279,6 +283,44 @@ static void MX_RTC_Init(void) } +/** + * @brief TIM6 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM6_Init(void) +{ + + /* USER CODE BEGIN TIM6_Init 0 */ + + /* USER CODE END TIM6_Init 0 */ + + TIM_MasterConfigTypeDef sMasterConfig = {0}; + + /* USER CODE BEGIN TIM6_Init 1 */ + + /* USER CODE END TIM6_Init 1 */ + htim6.Instance = TIM6; + htim6.Init.Prescaler = 4000 - 1; + htim6.Init.CounterMode = TIM_COUNTERMODE_UP; + htim6.Init.Period = 1000; + htim6.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim6) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM6_Init 2 */ + + /* USER CODE END TIM6_Init 2 */ + +} + /** * @brief USART1 Initialization Function * @param None @@ -319,6 +361,7 @@ static void MX_USART1_UART_Init(void) */ static void MX_GPIO_Init(void) { + GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOC_CLK_ENABLE(); @@ -329,6 +372,16 @@ static void MX_GPIO_Init(void) __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(LED1_GPIO_Port, LED1_Pin, GPIO_PIN_SET); + + /*Configure GPIO pin : LED1_Pin */ + GPIO_InitStruct.Pin = LED1_Pin; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(LED1_GPIO_Port, &GPIO_InitStruct); + } /* FSMC initialization function */ @@ -390,6 +443,15 @@ void _putchar(char character) { HAL_UART_Transmit(&huart1, (uint8_t *)&character, 1, 1000); } +void user_pm_frequency_update_callback(void) { + // STM32Cube relies on the systick timer for FreeRTOS tick, update anyway. + // A timing jitter may occur. + SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ); + + // Other peripherals also needs to be updated. + HAL_UART_Init(&huart1); +} + static void update_frequency_profile(user_pm_vfs_preset_t profile) { // Do not switch my context out. @@ -397,22 +459,16 @@ static void update_frequency_profile(user_pm_vfs_preset_t profile) { // Scale frequency. user_pm_scale_vfs(profile); - // STM32Cube relies on the systick timer for FreeRTOS tick, update anyway. - // A timing jitter may occur. - SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ); - - // Other peripherals also needs to be updated. - HAL_UART_Init(&huart1); taskEXIT_CRITICAL(); } static void report_system_frequencies(void) { printf("======== Report System Clock Frequencies ========\r\n"); - printf("[%012u] SYSCLK: %012uHz\r\n", xTaskGetTickCount(), HAL_RCC_GetSysClockFreq()); - printf("[%012u] HCLK: %012uHz\r\n", xTaskGetTickCount(), HAL_RCC_GetHCLKFreq()); - printf("[%012u] PCLK1: %012uHz\r\n", xTaskGetTickCount(), HAL_RCC_GetPCLK1Freq()); - printf("[%012u] PCLK2: %012uHz\r\n", xTaskGetTickCount(), HAL_RCC_GetPCLK2Freq()); + printf("[%012u] SYSCLK: %uMHz\t", xTaskGetTickCount(), HAL_RCC_GetSysClockFreq() / 1000000); + printf("HCLK: %uMHz\t", HAL_RCC_GetHCLKFreq() / 1000000); + printf("PCLK1: %uMHz\t", HAL_RCC_GetPCLK1Freq() / 1000000); + printf("PCLK2: %uMHz\r\n", HAL_RCC_GetPCLK2Freq() / 1000000); printf("================== Report Done ==================\r\n"); } @@ -432,15 +488,14 @@ void StartDefaultTask(void *argument) HeapStats_t stats; vPortGetHeapStats(&stats); printf("Heap available: %d bytes.\r\n", stats.xAvailableHeapSpaceInBytes); + update_frequency_profile(USER_PM_VFS_LOW_1); /* Infinite loop */ for(;;) { - for(uint8_t i = USER_PM_VFS_SAFE + 1; i < USER_PM_VFS_END; i++) { - update_frequency_profile(i); - report_system_frequencies(); - osDelay(5000); - } + report_system_frequencies(); + HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); + osDelay(1000); } /* USER CODE END 5 */ } diff --git a/Core/Src/stm32f4xx_hal_msp.c b/Core/Src/stm32f4xx_hal_msp.c index fdac635..ace6826 100644 --- a/Core/Src/stm32f4xx_hal_msp.c +++ b/Core/Src/stm32f4xx_hal_msp.c @@ -133,6 +133,56 @@ void HAL_RTC_MspDeInit(RTC_HandleTypeDef* hrtc) } +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM6) + { + /* USER CODE BEGIN TIM6_MspInit 0 */ + + /* USER CODE END TIM6_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM6_CLK_ENABLE(); + /* TIM6 interrupt Init */ + HAL_NVIC_SetPriority(TIM6_DAC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); + /* USER CODE BEGIN TIM6_MspInit 1 */ + + /* USER CODE END TIM6_MspInit 1 */ + } + +} + +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM6) + { + /* USER CODE BEGIN TIM6_MspDeInit 0 */ + + /* USER CODE END TIM6_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM6_CLK_DISABLE(); + + /* TIM6 interrupt DeInit */ + HAL_NVIC_DisableIRQ(TIM6_DAC_IRQn); + /* USER CODE BEGIN TIM6_MspDeInit 1 */ + + /* USER CODE END TIM6_MspDeInit 1 */ + } + +} + /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example diff --git a/Core/Src/stm32f4xx_it.c b/Core/Src/stm32f4xx_it.c index 84be045..a7bfe28 100644 --- a/Core/Src/stm32f4xx_it.c +++ b/Core/Src/stm32f4xx_it.c @@ -56,6 +56,7 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ +extern TIM_HandleTypeDef htim6; extern TIM_HandleTypeDef htim7; /* USER CODE BEGIN EV */ @@ -161,6 +162,20 @@ void DebugMon_Handler(void) /* please refer to the startup file (startup_stm32f4xx.s). */ /******************************************************************************/ +/** + * @brief This function handles TIM6 global interrupt, DAC1 and DAC2 underrun error interrupts. + */ +void TIM6_DAC_IRQHandler(void) +{ + /* USER CODE BEGIN TIM6_DAC_IRQn 0 */ + + /* USER CODE END TIM6_DAC_IRQn 0 */ + HAL_TIM_IRQHandler(&htim6); + /* USER CODE BEGIN TIM6_DAC_IRQn 1 */ + + /* USER CODE END TIM6_DAC_IRQn 1 */ +} + /** * @brief This function handles TIM7 global interrupt. */ diff --git a/Core/Src/user_freertos_support.c b/Core/Src/user_freertos_support.c new file mode 100644 index 0000000..d6efc8a --- /dev/null +++ b/Core/Src/user_freertos_support.c @@ -0,0 +1,23 @@ +#include "FreeRTOS.h" +#include "task.h" + +#include "stm32f4xx_hal.h" + +#include "user_power_mgmt.h" + +void vApplicationSleep(uint32_t xExpectedIdleTime) { + // Enter a critical section + __disable_irq(); + + eSleepModeStatus eSleepStatus = eTaskConfirmSleepModeStatus(); + if(eSleepStatus == eAbortSleep) { + // Do nothing, just return. + } + else { + uint32_t actual_ms = user_pm_idle_timeout(xExpectedIdleTime / portTICK_RATE_MS); + vTaskStepTick(actual_ms); + } + + // Exit critical section + __enable_irq(); +} \ No newline at end of file diff --git a/Core/Src/user_power_mgmt.c b/Core/Src/user_power_mgmt.c index 9558a36..c6c912e 100644 --- a/Core/Src/user_power_mgmt.c +++ b/Core/Src/user_power_mgmt.c @@ -1,6 +1,10 @@ #include "stm32f4xx_hal.h" #include "user_power_mgmt.h" +extern TIM_HandleTypeDef htim6; + +void user_pm_frequency_update_callback(void); + typedef struct { RCC_OscInitTypeDef RCC_OscInitStruct; RCC_ClkInitTypeDef RCC_ClkInitStruct; @@ -10,18 +14,16 @@ typedef struct { #include "user_power_mgmt_profiles.h" +static user_pm_vfs_preset_t s_current_preset; + static void user_pm_error_handler(void) { while(1) { // } } -static void user_pm_enter_sleep(void) { - // -} - -static void user_pm_exit_sleep(void) { - // +static void user_pm_tim_callback(TIM_HandleTypeDef *htim) { + // No idea for now, just keep it. } /** @@ -80,6 +82,12 @@ HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset) { // Update global variables SystemCoreClockUpdate(); + // This will happen in a critical section, no context switch will occur. + s_current_preset = preset; + + // Call user defined callbacks. + user_pm_frequency_update_callback(); + return HAL_OK; } @@ -90,5 +98,40 @@ HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset) { * @return Time actually in sleep mode */ uint32_t user_pm_idle_timeout(uint32_t sleep_msec) { - return 0; + user_pm_vfs_preset_t prev_preset = s_current_preset; + + if(user_pm_scale_vfs(USER_PM_VFS_XLOW_2) != HAL_OK) { + user_pm_error_handler(); + } + + if(sleep_msec > 65535) sleep_msec = 65535; // Cap. Maximum to 65535ms. + if(sleep_msec == 0) sleep_msec = 1; + + // Configure TIM6 period. + htim6.Init.Period = sleep_msec; + HAL_TIM_Base_Init(&htim6); + HAL_TIM_RegisterCallback(&htim6, HAL_TIM_PERIOD_ELAPSED_CB_ID, user_pm_tim_callback); + + // SysTick uses TIM7, disable TIM7 interrupt. + HAL_SuspendTick(); + + HAL_TIM_Base_Start_IT(&htim6); + + __WFI(); + + HAL_TIM_Base_Stop_IT(&htim6); + + HAL_ResumeTick(); + + // Restore previous VFS profile + if(user_pm_scale_vfs(prev_preset) != HAL_OK) { + user_pm_error_handler(); + } + + // In case we woken up by another interrupt, return actual sleep'd time. + return __HAL_TIM_GET_COUNTER(&htim6); +} + +__weak void user_pm_frequency_update_callback(void) { + // User application will implement this. } \ No newline at end of file diff --git a/Makefile b/Makefile index 4f20f66..04df8ed 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ ########################################################################################################################## -# File automatically-generated by tool: [projectgenerator] version: [3.14.1] date: [Tue Aug 24 20:18:03 CST 2021] +# File automatically-generated by tool: [projectgenerator] version: [3.14.1] date: [Wed Aug 25 02:18:49 CST 2021] ########################################################################################################################## # ------------------------------------------------ diff --git a/STM32F407ZE_MRB.ioc b/STM32F407ZE_MRB.ioc index 2d0299c..5e41727 100644 --- a/STM32F407ZE_MRB.ioc +++ b/STM32F407ZE_MRB.ioc @@ -20,63 +20,66 @@ Mcu.IP2=NVIC Mcu.IP3=RCC Mcu.IP4=RTC Mcu.IP5=SYS -Mcu.IP6=USART1 -Mcu.IPNb=7 +Mcu.IP6=TIM6 +Mcu.IP7=USART1 +Mcu.IPNb=8 Mcu.Name=STM32F407Z(E-G)Tx Mcu.Package=LQFP144 Mcu.Pin0=PC14-OSC32_IN Mcu.Pin1=PC15-OSC32_OUT -Mcu.Pin10=PF12 -Mcu.Pin11=PF13 -Mcu.Pin12=PF14 -Mcu.Pin13=PF15 -Mcu.Pin14=PG0 -Mcu.Pin15=PG1 -Mcu.Pin16=PE7 -Mcu.Pin17=PE8 -Mcu.Pin18=PE9 -Mcu.Pin19=PE10 +Mcu.Pin10=PH1-OSC_OUT +Mcu.Pin11=PF12 +Mcu.Pin12=PF13 +Mcu.Pin13=PF14 +Mcu.Pin14=PF15 +Mcu.Pin15=PG0 +Mcu.Pin16=PG1 +Mcu.Pin17=PE7 +Mcu.Pin18=PE8 +Mcu.Pin19=PE9 Mcu.Pin2=PF0 -Mcu.Pin20=PE11 -Mcu.Pin21=PE12 -Mcu.Pin22=PE13 -Mcu.Pin23=PE14 -Mcu.Pin24=PE15 -Mcu.Pin25=PD8 -Mcu.Pin26=PD9 -Mcu.Pin27=PD10 -Mcu.Pin28=PD11 -Mcu.Pin29=PD12 +Mcu.Pin20=PE10 +Mcu.Pin21=PE11 +Mcu.Pin22=PE12 +Mcu.Pin23=PE13 +Mcu.Pin24=PE14 +Mcu.Pin25=PE15 +Mcu.Pin26=PD8 +Mcu.Pin27=PD9 +Mcu.Pin28=PD10 +Mcu.Pin29=PD11 Mcu.Pin3=PF1 -Mcu.Pin30=PD13 -Mcu.Pin31=PD14 -Mcu.Pin32=PD15 -Mcu.Pin33=PG2 -Mcu.Pin34=PG3 -Mcu.Pin35=PG4 -Mcu.Pin36=PG5 -Mcu.Pin37=PA9 -Mcu.Pin38=PA10 -Mcu.Pin39=PA13 +Mcu.Pin30=PD12 +Mcu.Pin31=PD13 +Mcu.Pin32=PD14 +Mcu.Pin33=PD15 +Mcu.Pin34=PG2 +Mcu.Pin35=PG3 +Mcu.Pin36=PG4 +Mcu.Pin37=PG5 +Mcu.Pin38=PA9 +Mcu.Pin39=PA10 Mcu.Pin4=PF2 -Mcu.Pin40=PA14 -Mcu.Pin41=PD0 -Mcu.Pin42=PD1 -Mcu.Pin43=PD4 -Mcu.Pin44=PD5 -Mcu.Pin45=PG10 -Mcu.Pin46=PE0 -Mcu.Pin47=PE1 -Mcu.Pin48=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin49=VP_RTC_VS_RTC_Activate +Mcu.Pin40=PA13 +Mcu.Pin41=PA14 +Mcu.Pin42=PD0 +Mcu.Pin43=PD1 +Mcu.Pin44=PD4 +Mcu.Pin45=PD5 +Mcu.Pin46=PG10 +Mcu.Pin47=PE0 +Mcu.Pin48=PE1 +Mcu.Pin49=VP_FREERTOS_VS_CMSIS_V2 Mcu.Pin5=PF3 -Mcu.Pin50=VP_RTC_VS_RTC_Calendar -Mcu.Pin51=VP_SYS_VS_tim7 +Mcu.Pin50=VP_RTC_VS_RTC_Activate +Mcu.Pin51=VP_RTC_VS_RTC_Calendar +Mcu.Pin52=VP_SYS_VS_tim7 +Mcu.Pin53=VP_TIM6_VS_ClockSourceINT Mcu.Pin6=PF4 Mcu.Pin7=PF5 -Mcu.Pin8=PH0-OSC_IN -Mcu.Pin9=PH1-OSC_OUT -Mcu.PinsNb=52 +Mcu.Pin8=PF9 +Mcu.Pin9=PH0-OSC_IN +Mcu.PinsNb=54 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F407ZETx @@ -95,6 +98,7 @@ NVIC.SavedPendsvIrqHandlerGenerated=true NVIC.SavedSvcallIrqHandlerGenerated=true NVIC.SavedSystickIrqHandlerGenerated=true NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:false\:true\:false\:true +NVIC.TIM6_DAC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true NVIC.TIM7_IRQn=true\:15\:0\:false\:false\:true\:false\:false\:true NVIC.TimeBase=TIM7_IRQn NVIC.TimeBaseIP=TIM7 @@ -115,23 +119,23 @@ PCC.Checker=false PCC.Line=STM32F407/417 PCC.MCU=STM32F407Z(E-G)Tx PCC.PartNumber=STM32F407ZETx -PCC.Seq0=7 -PCC.Seq0.Step0.Average_Current=46 mA +PCC.Seq0=10 +PCC.Seq0.Step0.Average_Current=45.48 mA PCC.Seq0.Step0.CPU_Frequency=168 MHz PCC.Seq0.Step0.Category=In DS Table PCC.Seq0.Step0.DMIPS=210.0 PCC.Seq0.Step0.Duration=10 ms PCC.Seq0.Step0.Frequency=4 MHz -PCC.Seq0.Step0.Memory=FLASH +PCC.Seq0.Step0.Memory=RAM/FLASH/ART PCC.Seq0.Step0.Mode=RUN PCC.Seq0.Step0.Oscillator=HSE PLL -PCC.Seq0.Step0.Peripherals= -PCC.Seq0.Step0.TaMax=98.93 +PCC.Seq0.Step0.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step0.TaMax=99 PCC.Seq0.Step0.User's_Consumption=0 mA PCC.Seq0.Step0.Vcore=Scale1-High PCC.Seq0.Step0.Vdd=3.3 PCC.Seq0.Step0.Voltage_Source=Battery -PCC.Seq0.Step1.Average_Current=31 mA +PCC.Seq0.Step1.Average_Current=35.25 mA PCC.Seq0.Step1.CPU_Frequency=144 MHz PCC.Seq0.Step1.Category=In DS Table PCC.Seq0.Step1.DMIPS=180.0 @@ -140,13 +144,13 @@ PCC.Seq0.Step1.Frequency=4 MHz PCC.Seq0.Step1.Memory=RAM/FLASH/ART PCC.Seq0.Step1.Mode=RUN PCC.Seq0.Step1.Oscillator=HSE PLL -PCC.Seq0.Step1.Peripherals= -PCC.Seq0.Step1.TaMax=100.91 +PCC.Seq0.Step1.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step1.TaMax=100.35 PCC.Seq0.Step1.User's_Consumption=0 mA PCC.Seq0.Step1.Vcore=Scale2-Medium PCC.Seq0.Step1.Vdd=3.3 PCC.Seq0.Step1.Voltage_Source=Battery -PCC.Seq0.Step2.Average_Current=18.8 mA +PCC.Seq0.Step2.Average_Current=21.28 mA PCC.Seq0.Step2.CPU_Frequency=84000000 Hz PCC.Seq0.Step2.Category=Interpolation PCC.Seq0.Step2.DMIPS=105.0 @@ -155,13 +159,13 @@ PCC.Seq0.Step2.Frequency=4 MHz PCC.Seq0.Step2.Memory=RAM/FLASH/ART PCC.Seq0.Step2.Mode=RUN PCC.Seq0.Step2.Oscillator=HSE PLL -PCC.Seq0.Step2.Peripherals= -PCC.Seq0.Step2.TaMax=102.52 +PCC.Seq0.Step2.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step2.TaMax=102.19 PCC.Seq0.Step2.User's_Consumption=0 mA PCC.Seq0.Step2.Vcore=Scale2-Medium PCC.Seq0.Step2.Vdd=3.3 PCC.Seq0.Step2.Voltage_Source=Battery -PCC.Seq0.Step3.Average_Current=14.8 mA +PCC.Seq0.Step3.Average_Current=16.69 mA PCC.Seq0.Step3.CPU_Frequency=64000000 Hz PCC.Seq0.Step3.Category=Interpolation PCC.Seq0.Step3.DMIPS=80.0 @@ -170,13 +174,13 @@ PCC.Seq0.Step3.Frequency=4 MHz PCC.Seq0.Step3.Memory=RAM/FLASH/ART PCC.Seq0.Step3.Mode=RUN PCC.Seq0.Step3.Oscillator=HSE PLL -PCC.Seq0.Step3.Peripherals= -PCC.Seq0.Step3.TaMax=103.05 +PCC.Seq0.Step3.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step3.TaMax=102.8 PCC.Seq0.Step3.User's_Consumption=0 mA PCC.Seq0.Step3.Vcore=Scale2-Medium PCC.Seq0.Step3.Vdd=3.3 PCC.Seq0.Step3.Voltage_Source=Battery -PCC.Seq0.Step4.Average_Current=8.4 mA +PCC.Seq0.Step4.Average_Current=9.34 mA PCC.Seq0.Step4.CPU_Frequency=32000000 Hz PCC.Seq0.Step4.Category=Interpolation PCC.Seq0.Step4.DMIPS=40.0 @@ -185,13 +189,13 @@ PCC.Seq0.Step4.Frequency=4 MHz PCC.Seq0.Step4.Memory=RAM/FLASH/ART PCC.Seq0.Step4.Mode=RUN PCC.Seq0.Step4.Oscillator=HSE PLL -PCC.Seq0.Step4.Peripherals= -PCC.Seq0.Step4.TaMax=103.89 +PCC.Seq0.Step4.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step4.TaMax=103.77 PCC.Seq0.Step4.User's_Consumption=0 mA PCC.Seq0.Step4.Vcore=Scale2-Medium PCC.Seq0.Step4.Vdd=3.3 PCC.Seq0.Step4.Voltage_Source=Battery -PCC.Seq0.Step5.Average_Current=2 mA +PCC.Seq0.Step5.Average_Current=2.07 mA PCC.Seq0.Step5.CPU_Frequency=2400000 Hz PCC.Seq0.Step5.Category=Interpolation PCC.Seq0.Step5.DMIPS=3.0 @@ -200,27 +204,72 @@ PCC.Seq0.Step5.Frequency=2.4 MHz PCC.Seq0.Step5.Memory=RAM/FLASH/ART PCC.Seq0.Step5.Mode=RUN PCC.Seq0.Step5.Oscillator=HSE -PCC.Seq0.Step5.Peripherals= -PCC.Seq0.Step5.TaMax=104.74 +PCC.Seq0.Step5.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step5.TaMax=104.73 PCC.Seq0.Step5.User's_Consumption=0 mA PCC.Seq0.Step5.Vcore=Scale2-Medium PCC.Seq0.Step5.Vdd=3.3 PCC.Seq0.Step5.Voltage_Source=Battery -PCC.Seq0.Step6.Average_Current=2 mA -PCC.Seq0.Step6.CPU_Frequency=16 MHz +PCC.Seq0.Step6.Average_Current=3.24 mA +PCC.Seq0.Step6.CPU_Frequency=8 MHz PCC.Seq0.Step6.Category=In DS Table -PCC.Seq0.Step6.DMIPS=20.0 -PCC.Seq0.Step6.Duration=940 ms -PCC.Seq0.Step6.Frequency=16 MHz -PCC.Seq0.Step6.Memory=RAM/FLASH -PCC.Seq0.Step6.Mode=SLEEP +PCC.Seq0.Step6.DMIPS=10.0 +PCC.Seq0.Step6.Duration=10 ms +PCC.Seq0.Step6.Frequency=8 MHz +PCC.Seq0.Step6.Memory=RAM/FLASH/ART +PCC.Seq0.Step6.Mode=RUN PCC.Seq0.Step6.Oscillator=HSE -PCC.Seq0.Step6.Peripherals= -PCC.Seq0.Step6.TaMax=104.74 +PCC.Seq0.Step6.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step6.TaMax=104.57 PCC.Seq0.Step6.User's_Consumption=0 mA PCC.Seq0.Step6.Vcore=Scale2-Medium PCC.Seq0.Step6.Vdd=3.3 PCC.Seq0.Step6.Voltage_Source=Battery +PCC.Seq0.Step7.Average_Current=2.12 mA +PCC.Seq0.Step7.CPU_Frequency=4 MHz +PCC.Seq0.Step7.Category=In DS Table +PCC.Seq0.Step7.DMIPS=5.0 +PCC.Seq0.Step7.Duration=10 ms +PCC.Seq0.Step7.Frequency=4 MHz +PCC.Seq0.Step7.Memory=RAM/FLASH/ART +PCC.Seq0.Step7.Mode=RUN +PCC.Seq0.Step7.Oscillator=HSE +PCC.Seq0.Step7.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step7.TaMax=104.72 +PCC.Seq0.Step7.User's_Consumption=0 mA +PCC.Seq0.Step7.Vcore=Scale2-Medium +PCC.Seq0.Step7.Vdd=3.3 +PCC.Seq0.Step7.Voltage_Source=Battery +PCC.Seq0.Step8.Average_Current=1.12 mA +PCC.Seq0.Step8.CPU_Frequency=4 MHz +PCC.Seq0.Step8.Category=In DS Table +PCC.Seq0.Step8.DMIPS=5.0 +PCC.Seq0.Step8.Duration=920 ms +PCC.Seq0.Step8.Frequency=4 MHz +PCC.Seq0.Step8.Memory=RAM/FLASH +PCC.Seq0.Step8.Mode=SLEEP +PCC.Seq0.Step8.Oscillator=HSE +PCC.Seq0.Step8.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1 +PCC.Seq0.Step8.TaMax=104.85 +PCC.Seq0.Step8.User's_Consumption=0 mA +PCC.Seq0.Step8.Vcore=Scale2-Medium +PCC.Seq0.Step8.Vdd=3.3 +PCC.Seq0.Step8.Voltage_Source=Battery +PCC.Seq0.Step9.Average_Current=310 \u00B5A +PCC.Seq0.Step9.CPU_Frequency=0 Hz +PCC.Seq0.Step9.Category=In DS Table +PCC.Seq0.Step9.DMIPS=0.0 +PCC.Seq0.Step9.Duration=59000 ms +PCC.Seq0.Step9.Frequency=0 Hz +PCC.Seq0.Step9.Memory=n/a +PCC.Seq0.Step9.Mode=STOP +PCC.Seq0.Step9.Oscillator=Regulator_LP +PCC.Seq0.Step9.Peripherals= +PCC.Seq0.Step9.TaMax=104.96 +PCC.Seq0.Step9.User's_Consumption=0 mA +PCC.Seq0.Step9.Vcore=No Scale +PCC.Seq0.Step9.Vdd=3.3 +PCC.Seq0.Step9.Voltage_Source=Battery PCC.Series=STM32F4 PCC.Temperature=25 PCC.Vdd=3.3 @@ -257,6 +306,11 @@ PF2.Signal=FSMC_A2 PF3.Signal=FSMC_A3 PF4.Signal=FSMC_A4 PF5.Signal=FSMC_A5 +PF9.GPIOParameters=PinState,GPIO_Label +PF9.GPIO_Label=LED1 +PF9.Locked=true +PF9.PinState=GPIO_PIN_SET +PF9.Signal=GPIO_Output PG0.Signal=FSMC_A10 PG1.Signal=FSMC_A11 PG10.Mode=NorPsramChipSelect3_1 @@ -292,12 +346,12 @@ ProjectManager.PreviousToolchain= ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=STM32F407ZE_MRB.ioc ProjectManager.ProjectName=STM32F407ZE_MRB -ProjectManager.RegisterCallBack= +ProjectManager.RegisterCallBack=TIM ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=Makefile ProjectManager.ToolChainLocation= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_RTC_Init-RTC-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FSMC_Init-FSMC-false-HAL-true +ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-SystemClock_Config-RCC-false-HAL-false,3-MX_RTC_Init-RTC-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_FSMC_Init-FSMC-false-HAL-true,6-MX_TIM6_Init-TIM6-false-HAL-true RCC.48MHZClocksFreq_Value=84000000 RCC.AHBFreq_Value=168000000 RCC.APB1CLKDivider=RCC_HCLK_DIV4 @@ -415,6 +469,9 @@ SH.FSMC_NOE.0=FSMC_NOE,Sram1 SH.FSMC_NOE.ConfNb=1 SH.FSMC_NWE.0=FSMC_NWE,Sram1 SH.FSMC_NWE.ConfNb=1 +TIM6.IPParameters=Prescaler,Period +TIM6.Period=1000 +TIM6.Prescaler=4000 - 1 USART1.BaudRate=115200 USART1.IPParameters=VirtualMode,BaudRate USART1.VirtualMode=VM_ASYNC @@ -426,4 +483,6 @@ VP_RTC_VS_RTC_Calendar.Mode=RTC_Calendar VP_RTC_VS_RTC_Calendar.Signal=RTC_VS_RTC_Calendar VP_SYS_VS_tim7.Mode=TIM7 VP_SYS_VS_tim7.Signal=SYS_VS_tim7 +VP_TIM6_VS_ClockSourceINT.Mode=Enable_Timer +VP_TIM6_VS_ClockSourceINT.Signal=TIM6_VS_ClockSourceINT board=custom