想请教关于低功耗 halt mode 问题。第一个是:halt();只用这一句能真正的进入停机模式吗,如果能得话,我做的板子在这种模式下功耗怎么还那么高呢,首先声明外围电路没接东西,就一个开关按键,复位键?
第二问题是:我在执行halt();这句之前我把总中断关掉,相关的i/o设为悬浮输入,实时时钟也关掉,在这种情况下,外部中断开关键不能唤醒机器,只能用复位键才能唤醒。
第三个问题:希望有高人能给一个进入halt模式的例子,比如说在进入halt();需要关掉什么,不能关掉什么.谢谢!
1. halt();只用这一句能真正的进入停机模式,但不代表功耗最低。必须管脚处于固定状态,才能功耗最低。
2. halt状态的中断唤醒。可以参考如下代码,代码中PC.1接按键,用于唤醒:
// Set PC1 as Input floating with INT
GPIO_Init(GPIOC, GPIO_Pin_1, GPIO_Mode_In_FL_IT);
// Init the pin Interrupt sensitivity - Pin1(PC1)
EXTI_SetPinSensitivity(EXTI_PinNum_1, EXTI_Sensitivity_Fall_Only);
3.为了功耗最低,在进入halt前,如果之前用过AD就需要复位AD(调用ADC_DeInit()),外围电路没接东西就需要让其上拉或者输出固定高、低电平,即可。
halt(); 停机模式,功耗现在最低能降到1uA,但是外部中断不起作用了?请指教!
void GPIO_Configuration(void)
{
/* I/O口初始化;*/
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOE);
/*控制 LED的信号管脚*/
GPIO_Init(GPIOB,GPIO_Pin_4,GPIO_Mode_Out_PP_Low_Fast);
/*time2的触发入口*/
GPIO_Init(GPIOB,GPIO_Pin_3,GPIO_Mode_In_FL_IT );
/*GPIOD configuration: CONTROL ALARM (PD3)*/
GPIO_Init(GPIOD,GPIO_Pin_2 | GPIO_Pin_3,GPIO_Mode_Out_PP_Low_Fast);
/*两个外部中断入口*/
GPIO_Init(GPIOE, GPIO_Pin_0 | GPIO_Pin_3, GPIO_Mode_In_FL_IT);
GPIO_Init(GPIOA,GPIO_Pin_1, GPIO_Mode_In_FL_IT);
EXTI_DeInit();
/*模式选择中断入口*/
EXTI_SetPinSensitivity(EXTI_Pin_0,EXTI_Sensitivity_Falling );
/*开关键中断入口*/
EXTI_SetPinSensitivity(EXTI_Pin_3,EXTI_Sensitivity_Falling );
}
TIM1_Cmd(DISABLE);
TIM1_CtrlPWMOutputs(DISABLE);
TIM2_Cmd(DISABLE);
TIM3_Cmd(DISABLE);
ADC_DeInit(ADC1);
ADC_ChannelCmd(ADC1,ADC_Channel_9, DISABLE);
ADC_Cmd(ADC1 ,DISABLE);
ADC_TempSensorCmd(DISABLE);
ADC_VrefintCmd(DISABLE);
/*关闭总中断*/
//disableInterrupts();
PWR_FastWakeUpCmd(DISABLE);
PWR_UltraLowPowerCmd(ENABLE);
GPIO_DeInit(GPIOA);
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOC);
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOE);
//GPIO_ResetBits(GPIOD, GPIO_Pin_2 | GPIO_Pin_3);
//GPIO_ResetBits(GPIOE, GPIO_Pin_0 | GPIO_Pin_3);
GPIO_Init(GPIOA, GPIO_Pin_All,GPIO_Mode_In_PU_No_IT );
GPIO_Init(GPIOB, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|
GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7,GPIO_Mode_In_PU_No_IT );
GPIO_Init(GPIOC, GPIO_Pin_All,GPIO_Mode_In_PU_No_IT );
GPIO_Init(GPIOD, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|
GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7,GPIO_Mode_In_PU_No_IT );
GPIO_Init(GPIOE, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_4|
GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7,GPIO_Mode_In_PU_No_IT );
GPIO_Init(GPIOE, GPIO_Pin_3, GPIO_Mode_In_FL_IT);
EXTI_DeInit();
EXTI_SetPinSensitivity(EXTI_Pin_3,EXTI_Sensitivity_Falling );
enableInterrupts();
GPIO_ResetBits(GPIOB, GPIO_Pin_4);
GPIO_ResetBits(GPIOD, GPIO_Pin_3);
//GPIO_Init(GPIOE, GPIO_Pin_3, GPIO_Mode_In_FL_IT);
//GPIO_Init(GPIOE, GPIO_Pin_3, GPIO_Mode_In_FL_IT);
GPIO_Init(GPIOF, GPIO_Pin_0,GPIO_Mode_In_PU_No_IT );
CLK_PeripheralClockConfig(CLK_Peripheral_ADC1, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_RTC, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_LCD, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM1, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM2, DISABLE);
CLK_PeripheralClockConfig(CLK_Peripheral_TIM3, DISABLE);
halt(); //system go to halt mode;
GPIO_Init(GPIOE, GPIO_Pin_0 | GPIO_Pin_3, GPIO_Mode_In_FL_IT);
EXTI_DeInit();
/*开关键中断入口*/
EXTI_SetPinSensitivity(EXTI_Pin_3,EXTI_Sensitivity_Falling );
这是在初始化时使能的,
我在进入halt();之前
又使能了一次
/*开关键中断入口*/
GPIO_Init(GPIOE, GPIO_Pin_3, GPIO_Mode_In_FL_IT);
EXTI_DeInit();
EXTI_SetPinSensitivity(EXTI_Pin_3,EXTI_Sensitivity_Falling );
enableInterrupts();
版主:
我觉得自己使能了,只是不知道正确与否,请指教!
halt(); 停机模式,功耗现在最低能降到1uA,但是外部中断不起作用了?请指教!
void GPIO_Configuration(void)
{
/* I/O口初始化;*/
GPIO_DeInit(GPIOB);
GPIO_DeInit(GPIOD);
GPIO_DeInit(GPIOE);
...
HALT模式下,STM8L的功耗应该在1uA以下,跟datasheet标明的0.4uA接近。
是我搞错了,我在进入停机模式之前把好多东西都关掉了,以为是中断不起作用,今天发现不是这样。不过要留一个i/o口做外部中断用,功耗就降不了?请指教
把你的程序发过来让学习一下。谢谢
PWR_FastWakeUpCmd(DISABLE);
PWR_UltraLowPowerCmd(ENABLE);
加上这两句 功耗可以更低 我测出来的是0.43uA
GPIO_Init(GPIOC, GPIO_Pin_All,GPIO_Mode_In_PU_No_IT );
这种方法配置管脚是 管脚的输出电平为高?
其他方式配置是 测量功耗比较大。
想问一下,在halt();模式下,怎样配置GPIO比较好请高手举个例子
GPIO_Init(GPIOC, GPIO_Pin_All,GPIO_Mode_In_PU_No_IT );
这种方法配置管脚是 管脚的输出电平为高?
其他方式配置是 测量功耗比较大。
想问一下,在halt();模式下,怎样配置GPIO比较好请高手举个例子 ...
对于悬空的引脚,使用GPIO_Mode_In_PU_No_IT 比较好,也可以让悬空的引脚都输出低电平,功耗同样可以做到最低。