关于halt模式电流求助
外部中断加唤醒做的程序,目前功能都正常,目前就碰到电流问题,项目有用到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模式电流求助
在休眠以前,把IO口改为搞阻态就行。这样是因为你有输入和输出,导致的电流变大。RE:关于halt模式电流求助
好的,这两个i/o是改不了了,我其他的I/O口都是设的是输入悬浮,知道是正常就行,谢谢版主,这个案子多亏你的指导!RE:关于halt模式电流求助
不客气。;P
页:
[1]