3
我希望使用盡可能小的功率讀取約300波特的USART1。 40個字節。還有很多其他外設,但它們不需要運行,所有需要運行的都是RTC並行運行。外圍設備需要冷凍,內存需要相同。在STM32L0上進入低功耗模式以使用USART1
我看到了低功耗運行模式是最佳模式(請糾正我,如果我錯了這裏)這種方式:
void HAL_PWREx_EnableLowPowerRunMode(void)
{
/* Enters the Low Power Run mode */
SET_BIT(PWR->CR, PWR_CR_LPSDSR);
SET_BIT(PWR->CR, PWR_CR_LPRUN);
}
現在此刻的時鐘配置是
- 系統時鐘源= PLL(HSI)
- SYSCLK(赫茲)= 32000000
- HCLK(赫茲)= 32000000
- AHB預分頻器= 1
- APB1預分頻器= 1
- APB2預分頻器= 1
- HSI頻率(Hz)= 16000000
- PLLMUL = 6
- PLLDIV = 3
- Flash延時(WS)= 1
- 功率調節器電壓= SCALE 1
如何進入該模式並從中恢復?
// Init?
HAL_PWREx_EnableLowPowerRunMode();
HAL_PWREx_DisableLowPowerRunMode();
// Deinit?
我在init的嘗試,我在這裏錯過了什麼?
void init_clock(){
RCC_OscInitTypeDef RCC_OscInitStruct;
RCC_ClkInitTypeDef RCC_ClkInitStruct;
RCC_PeriphCLKInitTypeDef PeriphClkInit;
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_MSI;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
{
Error_Handler();
}
/**Configure the main internal regulator output voltage
*/
__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE2);
/**Initializes the CPU, AHB and APB busses clocks
*/
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI|RCC_OSCILLATORTYPE_MSI;
RCC_OscInitStruct.HSIState = RCC_HSI_DIV4;
RCC_OscInitStruct.HSICalibrationValue = 16;
RCC_OscInitStruct.MSIState = RCC_MSI_ON;
RCC_OscInitStruct.MSICalibrationValue = 0;
RCC_OscInitStruct.MSIClockRange = RCC_MSIRANGE_0;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
{
Error_Handler();
}
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USART1;
PeriphClkInit.Usart1ClockSelection = RCC_USART1CLKSOURCE_SYSCLK;
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
{
Error_Handler();
}
}
- DEINIT =同時鍾配置
您可能對electronics.stackexchange有更好的運氣要求。請注意,交叉發帖會導致一些人變得不合理地生氣,並且您的問題很可能會從這兩個網站中刪除,因此請選擇一個。 – BurnsBA
@BurnsBA我要在這裏嘗試我的運氣。上次它解決了。看到我的類似問題http://stackoverflow.com/questions/34874020/auto-baud-rate-detect-for-stm32l0 –
UART1是不低功耗。那將是LPUART1。只是因爲有人沒有注意到網站規則並沒有把問題放在話題上。我們不是諮詢服務機構。你最好在別處嘗試。 – Olaf