スタンバイウェイク
1.低電力モードの概要
システムまたは電源がリセットされた後、マイクロプロセッサは実行状態にあり、HCLKは実行状態のCPUにクロックを提供し、カーネルはプログラムコードを実行します。CPUが実行を継続する必要がない場合(たとえば、外部イベントを待機している場合)、電力を節約するために複数の低電力モードを使用できます。ユーザーは、最小の消費電力、最速の起動時間、利用可能なウェイクアップソースに基づいて、最適な低電力モードを選択する必要があります。STM32は3つの低消費電力モードを提供し、さまざまなレベルの消費電力削減を実現します。
- スリープモード(CM3コアが動作を停止し、周辺機器はまだ実行中)(最大の電力消費)
- 停止モード(すべてのクロックが停止)(通常の消費電流は約20uA)
- スタンバイモード(1.8Vコアの電源がオフ)(最小消費電流は約2uA)
実行モードでは、次の方法でも消費電力を削減できます。
- システムクロックを下げる
- APBおよびAHBバス上の未使用のペリフェラルのクロックをオフにします
この実験では、STM32の最低消費電力モード(スタンバイモード)のみを紹介しています。スタンバイモードでは、STM32の最小消費電力を実現できます。このモードでは、CM3ディープスリープモードで電圧レギュレータがオフになり、1.8V電源領域全体がオフになり、PLL / HSI / HSE発振器もオフになり、SRAMおよびレジスタの内容が失われます。バックアップレジスタとスタンバイ回路だけが電源を維持します。
次の図は、STM32がスタンバイモードに入るときとスタンバイモードから出るときの状態を示しています。
2.ハードウェア設計
この実験では、D1インジケータライトを使用して、システムが正常に動作していることを示します。インジケータライトは、スタンバイモードに入ったことを示すためにオフになります。K_UPボタンは、スタンバイモードをウェイクアップし、シリアルポート1を使用して関連するデバッグ情報を出力します。
- D1インジケーター
- K_UPボタン
- USART1シリアルポート
3.ソフトウェア設計
3.1 STM32CubeMX設定
- RCCは外部HSEを設定、クロックは72Mに設定
- PC0はGPIOプッシュプル出力モード、プルアップ、高速に設定され、デフォルトの出力レベルは高
- PA0はGPIOプルダウン入力モードに設定されています
- USART1は非同期通信モードとして選択され、ボーレートは115200ビット/秒に設定され、送信データ長は8ビット、パリティなし、1ストップビットです。
- プロジェクト名を入力し、プロジェクトパス(中国語以外)を選択し、MDK-ARM V5を選択します。IPごとに「.c / .h」ファイルのペアとして生成されたペリフェラルの初期化を確認します。「コードを生成」をクリックしてプロジェクトコードを生成します
3.2 MDK-ARMプログラミング
- main.cファイルにスタンバイモードに入る関数を追加する
/* USER CODE BEGIN 4 */
void Sys_Enter_Standby(void){
__HAL_RCC_PWR_CLK_ENABLE(); //使能PWR时钟
__HAL_PWR_CLEAR_FLAG(PWR_FLAG_WU); //清除Wake_UP标志
HAL_PWR_EnableWakeUpPin(PWR_WAKEUP_PIN1); //设置WAKEUP用于唤醒
HAL_PWR_EnterSTANDBYMode(); //进入待机模式
}
/* USER CODE END 4 */
- main関数のwhileループに次のテストプログラムを追加します。
while (1){
printf("Time: 5\r\n");
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(1000);
printf("Time: 4\r\n");
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(1000);
printf("Time: 3\r\n");
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(1000);
printf("Time: 2\r\n");
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_SET);
HAL_Delay(1000);
printf("Time: 1\r\n");
HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,GPIO_PIN_RESET);
HAL_Delay(1000);
printf("Entered Standby Mode...Please press KEY_UP to wakeup system!\r\n");
Sys_Enter_Standby();
}
4.ダウンロードの確認
コンパイルが正常に完了したら、開発ボードにダウンロードします。システムの実行中にD1インジケーターが連続的に点滅し、5秒後にスタンバイモードに入り、D1インジケーターがオフになります。KEY_UPボタンまたはリセットボタンを押すと、スタンバイモードが解除され、システムが再起動し、シリアルポートがプロンプトメッセージを出力します。