外部中断加唤醒做的程序,目前功能都正常,目前就碰到电流问题,项目有用到2个i/o口,一个做输入,外部中断有上拉电阻;一个输出接一个led灯和一个电阻到vdd,我在进入halt模式时,输出高电平的,应该是正确的;有用一个timer2,我也是在halt时将其关掉了,其他不用的时钟也都关了;即使这样也仍然有1.2mA的电流,以下是我的设置: void GPIO_Init(void) { PB_DDR |= 0x20; /* PB5 Output 其他输入. */ PB_CR1 |= 0x20; /* PB5推挽输 其他悬空输入 */ PB_CR2 = 0x00; /* Output speed up to 2MHz. */ PB_ODR=0X20; PD_DDR=0X00; PD_CR1=0X08; PD_CR2=0x08; /* PD3允许中断 其他禁止中断 */ EXTI_CR1 = 0x80; /*仅下降沿触发*/ EXTI_CR2 = 0x00; } void CLK_Init(void) { /* Configure HSI prescaler*/ CLK_CKDIVR &= ~0x10; /*fMASTER频率 01: fHSI= fHSI RC output/2. */ CLK_CKDIVR |= 0x01; /* 001: fCPU=fMASTER/2. */ CLK_PCKENR1=0x20; CLK_PCKENR2=0X00; } void TIM_Init(void) { TIM2_PSCR =0x03; // 8分频 TIM2时基为1us TIM2_ARRH =0x00; // TIM2_ARRL =0x96; // TIM2_IER =0x01; //使能TIM2中断 TIM2_CR1 =0x81; // 使能TIM2计数 } 进入halt时的设置: TIM2_CR1&=~(0x01); // 停止TIM2计数 CLK_PCKENR1&=~(0x20); CLK_SWCR |= 0x02; /* Enable switch */ CLK_SWR = 0xD2; /* Select LSI */ while (!(CLK_SWCR & 0x08)); /* Wait for switch done */ if (CLK_CMSR != 0xD2) //等待切换完毕 while(1); //等待切换完毕 _asm("nop"); _asm("halt"); CLK_SWCR |= 0x02; /* Enable switch */ CLK_SWR = 0xE1; //切换到HSI while (!(CLK_SWCR & 0x08)); /* Wait for switch done */ if (CLK_CMSR != 0xE1) //等待切换完毕 while(1); //等待切换完毕 CLK_PCKENR1|=0X20; //只打开TIM2 clock TIM2_CR1|=0X01; //起用TIM2计数 难道是中断上拉口消耗电流,还是在切到LSI时要把HSI关掉?1.2mA正常吗,各位请帮帮忙 |
RE:关于halt模式电流求助
电路是NRST =>0.01UF电容到地
PD3=>接红外接收头,由于外部没上拉电阻,我只能将PD3设为内部输入上拉
PB5=>LED+电阻接到vdd
其他的什么都没接,用的HSI.当然vdd与vss之间是有电容的.
RE:关于halt模式电流求助
RE:关于halt模式电流求助
RE:关于halt模式电流求助