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デバッガをつないでおくと、そこでも食う。
コメント