STM32の低消費電流モードで、妙に消費電流が多くなってしまって、悩んだ

STM32を低消費電流モードにする実験をした。

STM32の使いやすい低消費電流モードは Stopモードだと思う。
Sleepモードは、全周辺をDisableにしても 72MHz時 7.5mAも食ってしまうのであまり意味がない。
Stopモードは 内蔵LDOを LowPowerモードにすると、 14uAということになっている。また、イベントや割り込みで起きることができ、そこから実行を再開できるので使いやすい。
(Stanbyモードでは、2.4uAしか食わないが、起きる==RESETであるのであまり使いやすくない)

GPIOピンを1つ、 GPIO_Mode_IPU (内蔵プルアップONのInputモード)に設定し、このGPIOピンのFallエッジイベントで起きるように設定して Stopしてみたが…

PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFE);

… 500uAくらい食っている。

しばらく悩んでから、STの Low Power モードに関する AN2629 を見てみた。
AN2629 のサンプルコードでは、GPIO設定時にまず以下のようにしてから、必要なピンの設定をしていた。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |
  RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_Init(GPIOB, &GPIO_InitStructure);
GPIO_Init(GPIOC, &GPIO_InitStructure);
GPIO_Init(GPIOD, &GPIO_InitStructure);
GPIO_Init(GPIOE, &GPIO_InitStructure);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB
  | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_AFIO, DISABLE);

要するに、いったん、すべてのポートを、アナログInputに設定している。

GPIO_Mode_IN_FLOATING (リセット時のデフォルト)で、ピンを浮かしておくと、電流を食うのですね…ためしに、オープンにしたピンを3本、GPIO_Mode_IN_FLOATINGにしたら、1ピンにつき22uAくらい食ってしまった。これかぁ~

上記GPIO初期化は必ずやることにしよう…と思いました。

P.S. あと、CQ-STARM基板で実験する場合、あれは加速度センサが常時電源ONなので、あれで680uAくらい食う。
P.S.2. JTAGデバッガをつないでおくと、そこでも食う。

コメント

タイトルとURLをコピーしました