while (1)
{
if(fPowerOn_flag == FALSE)
{
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//PD3脚设置为输入模式,Q1截止
halt();//进入停机模式
}else
{
GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST);//PD3脚设置为输出模式且为低电平,Q1导通
///////
//插入用户自定义的代码
//////
}
}
}
B)stm8s_it.c的源代码:
void Delay(uint16_t nCount); //Delay函数在main.c中定义
extern bool fPowerOn_flag; //fPowerOn_flag在main.c中定义,所以这里要声明成外部变量
INTERRUPT_HANDLER(EXTI_PORTD_IRQHandler, 6)
{
Delay(6000); //延时消抖
if(!GPIO_ReadInputPin(GPIOD, GPIO_PIN_3))//判断是不是按钮被按下
{
if(fPowerOn_flag)
{
fPowerOn_flag=FALSE;
}else
{
fPowerOn_flag=TRUE;
}
}
}
3、关机后实测结果
使用STM8S开发板实测关机电流,为40μA左右:
按18650锂电池的典型容量2500mah计算,关机后可以支持2500mah/0.04ma/24小时/365天=7.1年,已经超过电池的充电循环使用寿命了,基本可以接受,不过应该还没有达到最低值,还可以研究Datasheet,继续优化软件,进一步减低关机电流。
4、总结
开关机部分就讲完了,最后总结一下,这部分学习到的知识点包括:
1、单片机硬件设计,至少需要一个VCAP电容接到VCAP引脚和地之间,选用容量为1μF的瓷片电容,电在路布局上,这个电容越靠近单片机IC越好。
2、设置各个引脚的输入、输出模式设置方法
3、进入和退出停机模式的方法
4、设置外部中断和中断处理程序
责任编辑;zl
关于控制,MCU就介绍完了,您有什么想法可以联系小编。