现在的位置: 首页 > 综合 > 正文

EFM32片内外设–GPIO EM4唤醒

2013年05月05日 ⁄ 综合 ⁄ 共 986字 ⁄ 字号 评论关闭

EFM32的EM3虽然功耗很低,0.6uA,但是在一些场合仍然显得浪费,特别是那种一次性消费的电池供电产品,客户的想法仍然是越低越好,最好是不耗电。所以,很多时候,就只能让MCU进入EM4状态。

当EFM32进入EM4状态之后,片内的几乎所有模块都掉电了,只有特殊的的几个GPIO口以及外部Reset引脚才能唤醒。那几个特殊的GPIO口就是具有EM4唤醒的引脚,例如PF2,PE13等等。另外,软件也可以配置GPIO口唤醒的极性,例如下降沿唤醒,以及上升沿唤醒等。这些由GPIO_EM4WUPOL寄存器中的EM4WUPOL来控制。如果配置了多个GPIO口作为EM4唤醒源的话,也可以通过GPIO_EM4WUCAUSE寄存器来查询,MCU是被哪个GPIO口唤醒的。

如下,我们就以GPIO口的EM4唤醒做个最简单的例程:

测试硬件: TG STK

软件:

 

#include "efm32.h"
#include "em_chip.h"
#include "em_cmu.h"
#include "em_gpio.h"
#include "em_emu.h"

int main(void)
{
  /* Chip errata */
  CHIP_Init();
 
  CMU_ClockEnable(cmuClock_HFPER, true);
  CMU_ClockEnable(cmuClock_GPIO, true);
 
  GPIO_PinModeSet(gpioPortD,7,gpioModePushPull,1);
 
  unsigned long ulDelay = 600000;
  while(ulDelay--);
 
  GPIO_PinModeSet(gpioPortD,7,gpioModePushPull,0);
 
  GPIO_PinModeSet(gpioPortE,13,gpioModeInputPullFilter ,1); //上拉输入
  GPIO_EM4EnablePinWakeup(GPIO_EM4WUEN_EM4WUEN_E13, 0); //低电平触发
 
  while(1)
  {
      EMU_EnterEM4();
  }
}

 

PS: 在测试的过程中发现,如果单纯的将PE13设置为gpioModeInput模式的话,在不加外部器件的情况下,比较容易受到外部的干扰。但是如果配置为上拉带滤波输入的话,抗干扰的性能则会大幅度加强。

抱歉!评论已关闭.