環境
- NUCLEO-L432KC(STM32L432KC)
- STM32CubeMX
- STM32Cube FW_L4 V1.14.0
症状
STM32L4には、省電力モードがいくつか用意されていて、用途に合わせてモードを切り替えることができる。
ファームウェア付属のサンプルを参考にして、Runモードから以下のようにしてSTOP2モードに入り、
/* Enter STOP 2 mode */
HAL_PWREx_EnterSTOP2Mode(PWR_STOPENTRY_WFI);
一定時間経過後RTCからの割り込みをトリガにRunモードに復帰して色々しようとしたところ、どうもSTOP2に入らずすぐに次のRunモード部分に飛んでいるようだった。
色々コードをいじってみたが直らず、ある時成功したかと思いきや、同じコードを書きこみなおすと再び症状が現れた(!?)ので、どうも直っていないようだった。
解決
以下のサイト(STのコミュニティ)
STOP2 mode not Entering from HAL_PWREx_EnterSTOP2Mode
の書き込みによると、
Try to disable the Systick timer. If any IRQ is pending, the core does not enter stop2 mode.
とのこと。そこで、HAL_Delay()やTimeoutの管理に使われているTimebaseのSourceをSysTickから使っていないTIM1に変更すると、STOP2モードに入るようになった。
追記(動作未確認)
Systickを止めるにはHAL_SuspendTick()
、再開にはHAL_ResumeTick()
を使うのかもしれない。