在线时间0 小时
UID225437
ST金币0
蝴蝶豆0
注册时间2009-7-17
新手上路
- 最后登录
- 1970-1-1
|
a0a.1 0b0c
外部中断加唤醒做的程序,目前功能都正常,目前就碰到电流问题,项目有用到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正常吗,各位请帮帮忙
|
|