概要
STM32 HALのSTANDBYモードに関しての日本語記事が少ないのでまとめました。
STANDBYモードとはSTM32にいくつかある省電力モードの1つで、I/O制御が可能な最低電力モードです。(SHUTDOWNモードが最も省電力)
詳細は以下のサイトを参考にして下さい。
今回私が使用したのはSTM32F446RET搭載のNUCLEO-F446REです。NUCLEOボードにはUSER Buttonがありますが、ちょうどこのスイッチが接続されているポートを、STANDBYモードからのウェイクアップ入力として利用できるので使います。
設定
STM32F446RETではPA0ポートとPC13ポートをウェイクアップ入力として利用できます。今回はUSER Buttonが接続されている、PC13ポートのWake-Up 1を使います。
また動作の確認用にUARTとオンボードのLEDを使うため、USART2を有効化しPA5ポートを出力設定としました。
コード
whileループ処理の前にSTANDBYモードから復帰したかどうか確認します。STANDBYモード復帰のフラグは__HAL_PWR_GET_FLAG(PWR_FLAG_SB)で確認することが出来ます。
もし復帰したことを確認したらUARTでその通知が送られ、NUCLEOボードのLEDが10回素早く点灯します。
STANDBYモードからの復帰の確認
//Check if the SB flag is set
if(__HAL_PWR_GET_FLAG(PWR_FLAG_SB) != RESET)
{
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_SB); // clear the flag
//display the string
char *str = "Wakeup from the STANDBY MODE\n";
HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen (str), HAL_MAX_DELAY);
//Blink the LED
for(int i = 0; i < 20; i++){
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(50);
}
//Disable the WAKEUP PIN
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN1); //disable PA0
HAL_PWR_DisableWakeUpPin(PWR_WAKEUP_PIN2); //disable PC13
HAL_Delay(500);
}
以下がSTANDBYモードに移行するためのコードです。STANDBYモードに移行するまでは、LEDが点灯し続けます。またSTANDBYモードに入るときは必ずウェイクアップピンを有効にして下さい。
USER Buttonを押すことでSTANDBYモードに入ります。
STANDBYモードに移行
while (1)
{
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
HAL_Delay(200);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//When the B1 button is pushed, enter the standby mode
if(HAL_GPIO_ReadPin(GPIOC, GPIO_PIN_13) == GPIO_PIN_RESET)
{
//Now enter the standby mode
//Clear the WU FLAG
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU);
//Enable the WAKEUP PIN
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1);
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN2);
//display the string
char *str = "STANDBY MODE is ON\n\n";
HAL_UART_Transmit(&huart2, (uint8_t *)str, strlen (str), HAL_MAX_DELAY);
HAL_Delay(500);
//Enter the standby mode
HAL_PWR_EnterSTANDBYMode();
}
}
/* USER CODE END 3 */
ここで注意なのが、USER Buttonは基板上でプルアップされています。したがってSTANDBYモード中は常に押し続ける必要があり、離すことでSTANDBYモードから復帰します。
またstringを使用してますので、string.hをインクルードして下さい。
参考文献
投稿者の人気記事
-
Pinus0079
さんが
2021/07/27
に
編集
をしました。
(メッセージ: 初版)
-
Pinus0079
さんが
2021/07/27
に
編集
をしました。
-
Pinus0079
さんが
2021/07/27
に
編集
をしました。
ログインしてコメントを投稿する