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就介绍完了,您有什么想法可以联系小编。