Added more frequency profiles.
This commit is contained in:
parent
1f0887e8dc
commit
fa75a8948f
|
@ -9,6 +9,9 @@ typedef enum {
|
||||||
USER_PM_VFS_MID_2,
|
USER_PM_VFS_MID_2,
|
||||||
USER_PM_VFS_LOW_1,
|
USER_PM_VFS_LOW_1,
|
||||||
USER_PM_VFS_LOW_2,
|
USER_PM_VFS_LOW_2,
|
||||||
|
USER_PM_VFS_XLOW_1,
|
||||||
|
USER_PM_VFS_XLOW_2,
|
||||||
|
USER_PM_VFS_END,
|
||||||
} user_pm_vfs_preset_t;
|
} user_pm_vfs_preset_t;
|
||||||
|
|
||||||
HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset);
|
HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset);
|
||||||
|
|
|
@ -0,0 +1,192 @@
|
||||||
|
#ifndef USER_POWER_MGMT_PROFILES_H
|
||||||
|
#define USER_POWER_MGMT_PROFILES_H
|
||||||
|
|
||||||
|
// C standard guarantees uninitialized parts are zeros.
|
||||||
|
static user_pm_vfs_t s_user_vfs_table[] = {
|
||||||
|
{
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSI,
|
||||||
|
.HSIState = RCC_HSI_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_NONE,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
|
||||||
|
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_HSI,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV1,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV1,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_0,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // HIGH_1 = 168MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 168,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV2,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV4,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_5,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE1,
|
||||||
|
},
|
||||||
|
{ // HIGH_2 = 144MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 144,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV2,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV4,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_4,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // MID_1 = 84MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 84,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV2,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_2,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // MID_2 = 64MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 64,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV2,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_2,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // LOW_1 = 32MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 64,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV4,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_2,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // LOW_2 = 24MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_ON,
|
||||||
|
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
||||||
|
.PLL.PLLM = 4,
|
||||||
|
.PLL.PLLN = 72,
|
||||||
|
.PLL.PLLP = RCC_PLLP_DIV6,
|
||||||
|
.PLL.PLLQ = 4,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_0,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // XLOW_1 = 8MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_OFF,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_HSE,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_0,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
{ // XLOW_2 = 4MHz
|
||||||
|
.RCC_OscInitStruct = {
|
||||||
|
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
||||||
|
.HSEState = RCC_HSE_ON,
|
||||||
|
.PLL.PLLState = RCC_PLL_OFF,
|
||||||
|
},
|
||||||
|
.RCC_ClkInitStruct = {
|
||||||
|
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
||||||
|
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
||||||
|
.SYSCLKSource = RCC_SYSCLKSOURCE_HSE,
|
||||||
|
.AHBCLKDivider = RCC_SYSCLK_DIV2,
|
||||||
|
.APB1CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
.APB2CLKDivider = RCC_HCLK_DIV2,
|
||||||
|
},
|
||||||
|
.Flash_Latency = FLASH_LATENCY_0,
|
||||||
|
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
|
@ -212,6 +212,7 @@ void SystemClock_Config(void)
|
||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
HAL_RCC_MCOConfig(RCC_MCO2, RCC_MCO2SOURCE_SYSCLK, RCC_MCODIV_5);
|
||||||
/** Enables the Clock Security System
|
/** Enables the Clock Security System
|
||||||
*/
|
*/
|
||||||
HAL_RCC_EnableCSS();
|
HAL_RCC_EnableCSS();
|
||||||
|
@ -295,7 +296,7 @@ static void MX_USART1_UART_Init(void)
|
||||||
|
|
||||||
/* USER CODE END USART1_Init 1 */
|
/* USER CODE END USART1_Init 1 */
|
||||||
huart1.Instance = USART1;
|
huart1.Instance = USART1;
|
||||||
huart1.Init.BaudRate = 921600;
|
huart1.Init.BaudRate = 115200;
|
||||||
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
huart1.Init.WordLength = UART_WORDLENGTH_8B;
|
||||||
huart1.Init.StopBits = UART_STOPBITS_1;
|
huart1.Init.StopBits = UART_STOPBITS_1;
|
||||||
huart1.Init.Parity = UART_PARITY_NONE;
|
huart1.Init.Parity = UART_PARITY_NONE;
|
||||||
|
@ -319,6 +320,7 @@ static void MX_USART1_UART_Init(void)
|
||||||
*/
|
*/
|
||||||
static void MX_GPIO_Init(void)
|
static void MX_GPIO_Init(void)
|
||||||
{
|
{
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
|
|
||||||
/* GPIO Ports Clock Enable */
|
/* GPIO Ports Clock Enable */
|
||||||
__HAL_RCC_GPIOC_CLK_ENABLE();
|
__HAL_RCC_GPIOC_CLK_ENABLE();
|
||||||
|
@ -329,6 +331,14 @@ static void MX_GPIO_Init(void)
|
||||||
__HAL_RCC_GPIOD_CLK_ENABLE();
|
__HAL_RCC_GPIOD_CLK_ENABLE();
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
__HAL_RCC_GPIOA_CLK_ENABLE();
|
||||||
|
|
||||||
|
/*Configure GPIO pin : PC9 */
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_9;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
||||||
|
GPIO_InitStruct.Alternate = GPIO_AF0_MCO;
|
||||||
|
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FSMC initialization function */
|
/* FSMC initialization function */
|
||||||
|
@ -391,16 +401,31 @@ void _putchar(char character) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void update_frequency_profile(user_pm_vfs_preset_t profile) {
|
static void update_frequency_profile(user_pm_vfs_preset_t profile) {
|
||||||
|
|
||||||
|
// Do not switch my context out.
|
||||||
taskENTER_CRITICAL();
|
taskENTER_CRITICAL();
|
||||||
|
|
||||||
|
// Scale frequency.
|
||||||
user_pm_scale_vfs(profile);
|
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);
|
SysTick_Config(configCPU_CLOCK_HZ / configTICK_RATE_HZ);
|
||||||
|
|
||||||
|
// Other peripherals also needs to be updated.
|
||||||
HAL_UART_Init(&huart1);
|
HAL_UART_Init(&huart1);
|
||||||
|
|
||||||
taskEXIT_CRITICAL();
|
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("================== Report Done ==================\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* USER CODE END 4 */
|
/* USER CODE END 4 */
|
||||||
|
|
||||||
/* USER CODE BEGIN Header_StartDefaultTask */
|
/* USER CODE BEGIN Header_StartDefaultTask */
|
||||||
|
@ -421,13 +446,11 @@ void StartDefaultTask(void *argument)
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
update_frequency_profile(USER_PM_VFS_HIGH_1);
|
for(uint8_t i = USER_PM_VFS_SAFE + 1; i < USER_PM_VFS_END; i++) {
|
||||||
printf("[%012u] Set frequency to 168MHz.\r\n", xTaskGetTickCount());
|
update_frequency_profile(i);
|
||||||
osDelay(10000);
|
report_system_frequencies();
|
||||||
|
osDelay(5000);
|
||||||
update_frequency_profile(USER_PM_VFS_MID_1);
|
}
|
||||||
printf("[%012u] Set frequency to 84MHz.\r\n", xTaskGetTickCount());
|
|
||||||
osDelay(10000);
|
|
||||||
}
|
}
|
||||||
/* USER CODE END 5 */
|
/* USER CODE END 5 */
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,92 +8,7 @@ typedef struct {
|
||||||
uint32_t Voltage_Scale;
|
uint32_t Voltage_Scale;
|
||||||
} user_pm_vfs_t;
|
} user_pm_vfs_t;
|
||||||
|
|
||||||
// C standard guarantees uninitialized parts are zeros.
|
#include "user_power_mgmt_profiles.h"
|
||||||
static user_pm_vfs_t s_user_vfs_table[] = {
|
|
||||||
{
|
|
||||||
.RCC_OscInitStruct = {
|
|
||||||
.OscillatorType = RCC_OSCILLATORTYPE_HSI,
|
|
||||||
.HSIState = RCC_HSI_ON,
|
|
||||||
.PLL.PLLState = RCC_PLL_NONE,
|
|
||||||
},
|
|
||||||
.RCC_ClkInitStruct = {
|
|
||||||
.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK
|
|
||||||
| RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2,
|
|
||||||
.SYSCLKSource = RCC_SYSCLKSOURCE_HSI,
|
|
||||||
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
|
||||||
.APB1CLKDivider = RCC_HCLK_DIV1,
|
|
||||||
.APB2CLKDivider = RCC_HCLK_DIV1,
|
|
||||||
},
|
|
||||||
.Flash_Latency = FLASH_LATENCY_0,
|
|
||||||
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.RCC_OscInitStruct = {
|
|
||||||
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
|
||||||
.HSEState = RCC_HSE_ON,
|
|
||||||
.PLL.PLLState = RCC_PLL_ON,
|
|
||||||
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
|
||||||
.PLL.PLLM = 4,
|
|
||||||
.PLL.PLLN = 168,
|
|
||||||
.PLL.PLLP = RCC_PLLP_DIV2,
|
|
||||||
.PLL.PLLQ = 4,
|
|
||||||
},
|
|
||||||
.RCC_ClkInitStruct = {
|
|
||||||
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
|
||||||
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
|
||||||
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
|
||||||
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
|
||||||
.APB1CLKDivider = RCC_HCLK_DIV4,
|
|
||||||
.APB2CLKDivider = RCC_HCLK_DIV2,
|
|
||||||
},
|
|
||||||
.Flash_Latency = FLASH_LATENCY_5,
|
|
||||||
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE1,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.RCC_OscInitStruct = {
|
|
||||||
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
|
||||||
.HSEState = RCC_HSE_ON,
|
|
||||||
.PLL.PLLState = RCC_PLL_ON,
|
|
||||||
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
|
||||||
.PLL.PLLM = 4,
|
|
||||||
.PLL.PLLN = 144,
|
|
||||||
.PLL.PLLP = RCC_PLLP_DIV2,
|
|
||||||
.PLL.PLLQ = 4,
|
|
||||||
},
|
|
||||||
.RCC_ClkInitStruct = {
|
|
||||||
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
|
||||||
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
|
||||||
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
|
||||||
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
|
||||||
.APB1CLKDivider = RCC_HCLK_DIV4,
|
|
||||||
.APB2CLKDivider = RCC_HCLK_DIV2,
|
|
||||||
},
|
|
||||||
.Flash_Latency = FLASH_LATENCY_4,
|
|
||||||
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
.RCC_OscInitStruct = {
|
|
||||||
.OscillatorType = RCC_OSCILLATORTYPE_HSE,
|
|
||||||
.HSEState = RCC_HSE_ON,
|
|
||||||
.PLL.PLLState = RCC_PLL_ON,
|
|
||||||
.PLL.PLLSource = RCC_PLLSOURCE_HSE,
|
|
||||||
.PLL.PLLM = 4,
|
|
||||||
.PLL.PLLN = 84,
|
|
||||||
.PLL.PLLP = RCC_PLLP_DIV2,
|
|
||||||
.PLL.PLLQ = 4,
|
|
||||||
},
|
|
||||||
.RCC_ClkInitStruct = {
|
|
||||||
.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|
|
||||||
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2,
|
|
||||||
.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK,
|
|
||||||
.AHBCLKDivider = RCC_SYSCLK_DIV1,
|
|
||||||
.APB1CLKDivider = RCC_HCLK_DIV2,
|
|
||||||
.APB2CLKDivider = RCC_HCLK_DIV2,
|
|
||||||
},
|
|
||||||
.Flash_Latency = FLASH_LATENCY_2,
|
|
||||||
.Voltage_Scale = PWR_REGULATOR_VOLTAGE_SCALE2,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
static void user_pm_error_handler(void) {
|
static void user_pm_error_handler(void) {
|
||||||
while(1) {
|
while(1) {
|
||||||
|
@ -148,6 +63,8 @@ static HAL_StatusTypeDef user_pm_set_vfs_mode(user_pm_vfs_t *vfs) {
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset) {
|
HAL_StatusTypeDef user_pm_scale_vfs(user_pm_vfs_preset_t preset) {
|
||||||
|
|
||||||
|
if(preset > USER_PM_VFS_END) return HAL_ERROR;
|
||||||
|
|
||||||
// Transition system to a stable state.
|
// Transition system to a stable state.
|
||||||
if(user_pm_set_vfs_mode(&s_user_vfs_table[USER_PM_VFS_SAFE]) != HAL_OK) {
|
if(user_pm_set_vfs_mode(&s_user_vfs_table[USER_PM_VFS_SAFE]) != HAL_OK) {
|
||||||
// Something bad happened.
|
// Something bad happened.
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,5 +1,5 @@
|
||||||
##########################################################################################################################
|
##########################################################################################################################
|
||||||
# File automatically-generated by tool: [projectgenerator] version: [3.14.1] date: [Tue Aug 24 17:01:59 CST 2021]
|
# File automatically-generated by tool: [projectgenerator] version: [3.14.1] date: [Tue Aug 24 20:11:46 CST 2021]
|
||||||
##########################################################################################################################
|
##########################################################################################################################
|
||||||
|
|
||||||
# ------------------------------------------------
|
# ------------------------------------------------
|
||||||
|
|
|
@ -55,28 +55,29 @@ Mcu.Pin33=PG2
|
||||||
Mcu.Pin34=PG3
|
Mcu.Pin34=PG3
|
||||||
Mcu.Pin35=PG4
|
Mcu.Pin35=PG4
|
||||||
Mcu.Pin36=PG5
|
Mcu.Pin36=PG5
|
||||||
Mcu.Pin37=PA9
|
Mcu.Pin37=PC9
|
||||||
Mcu.Pin38=PA10
|
Mcu.Pin38=PA9
|
||||||
Mcu.Pin39=PA13
|
Mcu.Pin39=PA10
|
||||||
Mcu.Pin4=PF2
|
Mcu.Pin4=PF2
|
||||||
Mcu.Pin40=PA14
|
Mcu.Pin40=PA13
|
||||||
Mcu.Pin41=PD0
|
Mcu.Pin41=PA14
|
||||||
Mcu.Pin42=PD1
|
Mcu.Pin42=PD0
|
||||||
Mcu.Pin43=PD4
|
Mcu.Pin43=PD1
|
||||||
Mcu.Pin44=PD5
|
Mcu.Pin44=PD4
|
||||||
Mcu.Pin45=PG10
|
Mcu.Pin45=PD5
|
||||||
Mcu.Pin46=PE0
|
Mcu.Pin46=PG10
|
||||||
Mcu.Pin47=PE1
|
Mcu.Pin47=PE0
|
||||||
Mcu.Pin48=VP_FREERTOS_VS_CMSIS_V2
|
Mcu.Pin48=PE1
|
||||||
Mcu.Pin49=VP_RTC_VS_RTC_Activate
|
Mcu.Pin49=VP_FREERTOS_VS_CMSIS_V2
|
||||||
Mcu.Pin5=PF3
|
Mcu.Pin5=PF3
|
||||||
Mcu.Pin50=VP_RTC_VS_RTC_Calendar
|
Mcu.Pin50=VP_RTC_VS_RTC_Activate
|
||||||
Mcu.Pin51=VP_SYS_VS_tim7
|
Mcu.Pin51=VP_RTC_VS_RTC_Calendar
|
||||||
|
Mcu.Pin52=VP_SYS_VS_tim7
|
||||||
Mcu.Pin6=PF4
|
Mcu.Pin6=PF4
|
||||||
Mcu.Pin7=PF5
|
Mcu.Pin7=PF5
|
||||||
Mcu.Pin8=PH0-OSC_IN
|
Mcu.Pin8=PH0-OSC_IN
|
||||||
Mcu.Pin9=PH1-OSC_OUT
|
Mcu.Pin9=PH1-OSC_OUT
|
||||||
Mcu.PinsNb=52
|
Mcu.PinsNb=53
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F407ZETx
|
Mcu.UserName=STM32F407ZETx
|
||||||
|
@ -111,11 +112,13 @@ PC14-OSC32_IN.Mode=LSE-External-Oscillator
|
||||||
PC14-OSC32_IN.Signal=RCC_OSC32_IN
|
PC14-OSC32_IN.Signal=RCC_OSC32_IN
|
||||||
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
|
PC15-OSC32_OUT.Mode=LSE-External-Oscillator
|
||||||
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
|
PC15-OSC32_OUT.Signal=RCC_OSC32_OUT
|
||||||
|
PC9.Mode=Clock-out-2
|
||||||
|
PC9.Signal=RCC_MCO_2
|
||||||
PCC.Checker=false
|
PCC.Checker=false
|
||||||
PCC.Line=STM32F407/417
|
PCC.Line=STM32F407/417
|
||||||
PCC.MCU=STM32F407Z(E-G)Tx
|
PCC.MCU=STM32F407Z(E-G)Tx
|
||||||
PCC.PartNumber=STM32F407ZETx
|
PCC.PartNumber=STM32F407ZETx
|
||||||
PCC.Seq0=2
|
PCC.Seq0=7
|
||||||
PCC.Seq0.Step0.Average_Current=46 mA
|
PCC.Seq0.Step0.Average_Current=46 mA
|
||||||
PCC.Seq0.Step0.CPU_Frequency=168 MHz
|
PCC.Seq0.Step0.CPU_Frequency=168 MHz
|
||||||
PCC.Seq0.Step0.Category=In DS Table
|
PCC.Seq0.Step0.Category=In DS Table
|
||||||
|
@ -131,21 +134,96 @@ PCC.Seq0.Step0.User's_Consumption=0 mA
|
||||||
PCC.Seq0.Step0.Vcore=Scale1-High
|
PCC.Seq0.Step0.Vcore=Scale1-High
|
||||||
PCC.Seq0.Step0.Vdd=3.3
|
PCC.Seq0.Step0.Vdd=3.3
|
||||||
PCC.Seq0.Step0.Voltage_Source=Battery
|
PCC.Seq0.Step0.Voltage_Source=Battery
|
||||||
PCC.Seq0.Step1.Average_Current=17.48 mA
|
PCC.Seq0.Step1.Average_Current=31 mA
|
||||||
PCC.Seq0.Step1.CPU_Frequency=168 MHz
|
PCC.Seq0.Step1.CPU_Frequency=144 MHz
|
||||||
PCC.Seq0.Step1.Category=In DS Table
|
PCC.Seq0.Step1.Category=In DS Table
|
||||||
PCC.Seq0.Step1.DMIPS=210.0
|
PCC.Seq0.Step1.DMIPS=180.0
|
||||||
PCC.Seq0.Step1.Duration=990 ms
|
PCC.Seq0.Step1.Duration=10 ms
|
||||||
PCC.Seq0.Step1.Frequency=4 MHz
|
PCC.Seq0.Step1.Frequency=4 MHz
|
||||||
PCC.Seq0.Step1.Memory=RAM/FLASH
|
PCC.Seq0.Step1.Memory=RAM/FLASH/ART
|
||||||
PCC.Seq0.Step1.Mode=SLEEP
|
PCC.Seq0.Step1.Mode=RUN
|
||||||
PCC.Seq0.Step1.Oscillator=HSE PLL
|
PCC.Seq0.Step1.Oscillator=HSE PLL
|
||||||
PCC.Seq0.Step1.Peripherals=FSMC GPIOA GPIOC GPIOD GPIOE GPIOF GPIOG GPIOH RTC SYS USART1
|
PCC.Seq0.Step1.Peripherals=
|
||||||
PCC.Seq0.Step1.TaMax=102.69
|
PCC.Seq0.Step1.TaMax=100.91
|
||||||
PCC.Seq0.Step1.User's_Consumption=0 mA
|
PCC.Seq0.Step1.User's_Consumption=0 mA
|
||||||
PCC.Seq0.Step1.Vcore=Scale1-High
|
PCC.Seq0.Step1.Vcore=Scale2-Medium
|
||||||
PCC.Seq0.Step1.Vdd=3.3
|
PCC.Seq0.Step1.Vdd=3.3
|
||||||
PCC.Seq0.Step1.Voltage_Source=Battery
|
PCC.Seq0.Step1.Voltage_Source=Battery
|
||||||
|
PCC.Seq0.Step2.Average_Current=18.8 mA
|
||||||
|
PCC.Seq0.Step2.CPU_Frequency=84000000 Hz
|
||||||
|
PCC.Seq0.Step2.Category=Interpolation
|
||||||
|
PCC.Seq0.Step2.DMIPS=105.0
|
||||||
|
PCC.Seq0.Step2.Duration=10 ms
|
||||||
|
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.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.CPU_Frequency=64000000 Hz
|
||||||
|
PCC.Seq0.Step3.Category=Interpolation
|
||||||
|
PCC.Seq0.Step3.DMIPS=80.0
|
||||||
|
PCC.Seq0.Step3.Duration=10 ms
|
||||||
|
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.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.CPU_Frequency=32000000 Hz
|
||||||
|
PCC.Seq0.Step4.Category=Interpolation
|
||||||
|
PCC.Seq0.Step4.DMIPS=40.0
|
||||||
|
PCC.Seq0.Step4.Duration=10 ms
|
||||||
|
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.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.CPU_Frequency=2400000 Hz
|
||||||
|
PCC.Seq0.Step5.Category=Interpolation
|
||||||
|
PCC.Seq0.Step5.DMIPS=3.0
|
||||||
|
PCC.Seq0.Step5.Duration=10 ms
|
||||||
|
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.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.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.Oscillator=HSE
|
||||||
|
PCC.Seq0.Step6.Peripherals=
|
||||||
|
PCC.Seq0.Step6.TaMax=104.74
|
||||||
|
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.Series=STM32F4
|
PCC.Series=STM32F4
|
||||||
PCC.Temperature=25
|
PCC.Temperature=25
|
||||||
PCC.Vdd=3.3
|
PCC.Vdd=3.3
|
||||||
|
@ -240,15 +318,16 @@ RCC.HCLKFreq_Value=168000000
|
||||||
RCC.HSE_VALUE=8000000
|
RCC.HSE_VALUE=8000000
|
||||||
RCC.HSI_VALUE=16000000
|
RCC.HSI_VALUE=16000000
|
||||||
RCC.I2SClocksFreq_Value=192000000
|
RCC.I2SClocksFreq_Value=192000000
|
||||||
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EnbaleCSS,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
|
RCC.IPParameters=48MHZClocksFreq_Value,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2CLKDivider,APB2Freq_Value,APB2TimFreq_Value,CortexFreq_Value,EnbaleCSS,EthernetFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,HSE_VALUE,HSI_VALUE,I2SClocksFreq_Value,LSI_VALUE,MCO2PinFreq_Value,PLLCLKFreq_Value,PLLM,PLLN,PLLQCLKFreq_Value,PLLSourceVirtual,PWR_Regulator_Voltage_Scale,RCC_MCODiv2,RCC_RTC_Clock_Source,RCC_RTC_Clock_SourceVirtual,RTCFreq_Value,RTCHSEDivFreq_Value,SYSCLKFreq_VALUE,SYSCLKSource,VCOI2SOutputFreq_Value,VCOInputFreq_Value,VCOOutputFreq_Value,VcooutputI2S
|
||||||
RCC.LSI_VALUE=32000
|
RCC.LSI_VALUE=32000
|
||||||
RCC.MCO2PinFreq_Value=168000000
|
RCC.MCO2PinFreq_Value=33600000
|
||||||
RCC.PLLCLKFreq_Value=168000000
|
RCC.PLLCLKFreq_Value=168000000
|
||||||
RCC.PLLM=4
|
RCC.PLLM=4
|
||||||
RCC.PLLN=168
|
RCC.PLLN=168
|
||||||
RCC.PLLQCLKFreq_Value=84000000
|
RCC.PLLQCLKFreq_Value=84000000
|
||||||
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
|
RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
|
||||||
RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE1
|
RCC.PWR_Regulator_Voltage_Scale=PWR_REGULATOR_VOLTAGE_SCALE1
|
||||||
|
RCC.RCC_MCODiv2=RCC_MCODIV_5
|
||||||
RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE
|
RCC.RCC_RTC_Clock_Source=RCC_RTCCLKSOURCE_LSE
|
||||||
RCC.RCC_RTC_Clock_SourceVirtual=RCC_RTCCLKSOURCE_LSE
|
RCC.RCC_RTC_Clock_SourceVirtual=RCC_RTCCLKSOURCE_LSE
|
||||||
RCC.RTCFreq_Value=32768
|
RCC.RTCFreq_Value=32768
|
||||||
|
@ -339,7 +418,7 @@ SH.FSMC_NOE.0=FSMC_NOE,Sram1
|
||||||
SH.FSMC_NOE.ConfNb=1
|
SH.FSMC_NOE.ConfNb=1
|
||||||
SH.FSMC_NWE.0=FSMC_NWE,Sram1
|
SH.FSMC_NWE.0=FSMC_NWE,Sram1
|
||||||
SH.FSMC_NWE.ConfNb=1
|
SH.FSMC_NWE.ConfNb=1
|
||||||
USART1.BaudRate=921600
|
USART1.BaudRate=115200
|
||||||
USART1.IPParameters=VirtualMode,BaudRate
|
USART1.IPParameters=VirtualMode,BaudRate
|
||||||
USART1.VirtualMode=VM_ASYNC
|
USART1.VirtualMode=VM_ASYNC
|
||||||
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
|
VP_FREERTOS_VS_CMSIS_V2.Mode=CMSIS_V2
|
||||||
|
|
Loading…
Reference in New Issue