3
가능한 한 적은 전력으로 USART1을 300 보오트 정도로 사용하고 싶습니다. 40 바이트. 수많은 다른 주변 장치가 있지만 실행할 필요가 없습니다. 실행해야하는 모든 것이 병렬로 RTC입니다. 주변 장치는 얼어 있어야하며, 램은 동일해야합니다.USART1을 사용하기 위해 STM32L0에 저전력 모드 진입
나는이를 위해 (내가 잘못 여기있어 경우에 저를 수정하시기 바랍니다) 저전력 실행 모드는 최적의 모드를 볼 수있는 방법 : 이제
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 (Hz에서) = 32,000,000 012,351이며 6,
- HCLK (Hz에서) = 32,000,000
- AHB 프리스케일러 = 1
- APB1 프리스케일러 = 1
- APB2 프리스케일러 = 1
- HSI 주파수 (Hz) = 16,000,000
- PLLMUL = 6
- PLLDIV = 3
- 플래시 지연 (WS) = 1
- 전력 조정기 전압 = SCALE 1
이 모드로 들어가서 복구하려면 어떻게해야합니까?
// Init?
HAL_PWREx_EnableLowPowerRunMode();
HAL_PWREx_DisableLowPowerRunMode();
// Deinit?
내 시도는 무엇입니까? 여기서 무엇을 놓치고 있습니까?
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();
}
}
- USART1 정지 모드에서 바이트를 수신하고도 일어날 수 있습니다
전자 제품에 대해 더 궁금한 점이있을 것입니다. 스택 교환. 교차 게시는 일부 사람들이 불합리하게 화를 내며 질문이 두 사이트에서 삭제 될 수 있으므로 하나를 선택하십시오. – BurnsBA
@BurnsBA 여기에서 내 운을 시험해 볼 것입니다. 마지막으로 효과가있었습니다. 내 비슷한 질문을 참조하십시오 http://stackoverflow.com/questions/34874020/auto-baud-rate-detect-for-stm32l0 –
UART1은 저전력이 아닙니다. 그것은 LPUART1입니다. 그리고 누군가가 사이트 규칙을 알아 차리지 못해도 주제에 대해 질문을하지 않기 때문입니다. 우리는 컨설팅 서비스가 아닙니다. 당신은 다른 곳에서 더 잘 시도하십시오. – Olaf