STM8L051F3P6低功耗配置
Posted ideaming
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM8L051F3P6低功耗配置相关的知识,希望对你有一定的参考价值。
最低功耗是halt();
因为halt会关闭所有时钟,所以不用刻意去关时钟。
重要的是管脚的配置,根据不同情况配置板上的管脚
我的空板上用PB1作为外部中断来唤醒所以配置为上拉输入,下降沿触发。
GPIO_Init(GPIOB, GPIO_Pin_1, GPIO_Mode_In_PU_IT);
EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling);
ITC_SetSoftwarePriority(EXTI1_IRQn, ITC_PriorityLevel_2);
有一个指示灯
GPIO_Init(GPIOD, GPIO_Pin_0, GPIO_Mode_Out_PP_Low_Slow);
因为PA1是复位电路10K上拉,100nF电容接地,所以没管,其余的引脚设置推挽输出低
代码如下:
时钟配置
void SysClock_Init(void) { CLK_SYSCLKDivConfig(CLK_SYSCLKDiv_1);//SysClock = ClockFreq/1即16MHz/1=16MHz; if(CLK_GetSYSCLKSource() != CLK_SYSCLKSource_HSI)//if not HSI { CLK_SYSCLKSourceSwitchCmd(ENABLE); // enable switch sysclock source CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_HSI); // wait switch finished } SysClockFreq = CLK_GetClockFreq(); }
端口配置
void IO_Init(void)
{
GPIO_Init(GPIOA, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3, GPIO_Mode_Out_PP_Low_Slow);//没有配置PA1
GPIO_Init(GPIOB, GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7, GPIO_Mode_Out_PP_Low_Slow);
GPIO_Init(GPIOC, GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6, GPIO_Mode_Out_PP_Low_Slow);
GPIO_ResetBits(GPIOA,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3);//没有配置PA1
GPIO_ResetBits(GPIOB,GPIO_Pin_0|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7);
GPIO_ResetBits(GPIOC,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6);
GPIO_Init(LEDB_PORT, LEDB_PIN, GPIO_Mode_Out_PP_Low_Slow);//指示灯
//唤醒按键
GPIO_Init(KEYP_PORT, KEYP_PIN, GPIO_Mode_In_PU_IT);
EXTI_SetPinSensitivity(EXTI_Pin_1, EXTI_Trigger_Falling);
ITC_SetSoftwarePriority(EXTI1_IRQn, ITC_PriorityLevel_2);
}
主函数
void main(void) { SysClock_Init();//时钟配置 IO_Init();//端口配置 enableInterrupts();//使能中断 while (1) { if (Sys.Mode == RESET) { PWR_UltraLowPowerCmd(ENABLE);//不加这句1.2uA加入后0.38uA halt(); nop(); } }
中断处理
void KeyP_Int(void) { if (Sys.Mode) { Sys.Mode = 0; GPIO_SetBits(LEDB_PORT, LEDB_PIN); } else { Sys.Mode = 1; GPIO_ResetBits(LEDB_PORT, LEDB_PIN); } }
中断入口
INTERRUPT_HANDLER(EXTI1_IRQHandler, 9) { KeyP_Int(); EXTI_ClearITPendingBit(EXTI_IT_Pin1); }
空板0.38uA,追求不高已经达到了预期,如果有心的朋友,加把劲或许轻松达到官方的350nA。
以上是关于STM8L051F3P6低功耗配置的主要内容,如果未能解决你的问题,请参考以下文章