Implemented sleep mode.

This commit is contained in:
imi415 2021-08-25 03:11:43 +08:00
parent 361d5a74b6
commit 51e5fbce73
Signed by: imi415
GPG Key ID: 17F01E106F9F5E0A
12 changed files with 356 additions and 102 deletions

View File

@ -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

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */

View File

@ -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 */
}

View File

@ -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

View File

@ -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.
*/

View File

@ -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();
}

View File

@ -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.
}

View File

@ -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]
##########################################################################################################################
# ------------------------------------------------

View File

@ -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