历史上的今天
返回首页

历史上的今天

今天是:2025年08月14日(星期四)

正在发生

2020年08月14日 | 如何在STM8S单片机上实现一键式的开关机功能

2020-08-14 来源:elecfans

开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自锁开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。


开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的电流降低到μA级,对电池的消耗就可以忽略不计了。


1、电路设计

电路图如下,C1是STM8S单片机VCAP电容,保持内部1.8V电压的稳定,是STM8S单片机唯一必须接要的外部元件,选用容量为1μF的瓷片电容,而且从电路可靠性讲,这个电容越靠近单片机IC越好。


K1是按钮,一端接到单片机的PD4引脚上,另一端接地,这样按钮被按下就会产生一个低电平的脉冲。


Q1是三极管,通过发光二极管D1和限流电阻R1接到单片机的PD3上。这样当PD3输出低电平时,Q1导通,VCC上有电压,可以对系统供电,反之PD3输出高电平时,Q1截止VCC没有电压。


发光二极管D1还兼作电源指示灯的作用, Q1导通时发光反之不发光。


剩余的C2~C5都是电源退藕电容,用于消除电源上的干扰信号。P1、P2两个接线端分别接3.6V锂电池的正负极。

如何在STM8S单片机上实现一键式的开关机功能

2、软件设计

软件要实现的功能是,在PD4引脚上监控按钮按下产生的低电压脉冲信号,并根据这个信号来设置PD3引脚的输出电平去控制Q1的导通和截止,以及设置单片机自身的工作状态,以此实现对电源供电的控制。


1)引脚工作模式设置

首先要做的,就是设置单片机引脚的工作模式,把PD4设置为输入模式,D3设置为输出模式。

在STM8S_StdPeriph_Lib库中,可以使用这个函数进行设置:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)

GPIOx是端口编号,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口,GPIO_Pin是引脚编号,取值有GPIO_PIN_1~GPIO_PIN_7,函数通过GPIOx和GPIO_Pin两个参数指定一个唯一的引脚。

GPIO_Mode是工作模式了。表示输入模式的取值有四种,分别是要不要上拉,要不要中断的四种组合:

GPIO_MODE_IN_FL_NO_ITInput floaTIng, no external interrupt

GPIO_MODE_IN_PU_NO_ITInput pull-up, no external interrupt

GPIO_MODE_IN_FL_ITInput floaTIng, external interrupt

GPIO_MODE_IN_PU_ITInput pull-up, external interrupt

要上拉的话,单片机内部会自动为引脚提供一个上拉电流,在没有外部输入的情况下,引脚就是高电平了。


表示输出模式的取值有8种,分别是是否开漏输出、输出高低电平、是否高速输出的组合:

GPIO_MODE_OUT_OD_LOW_FASTOutput open-drain, low level, 10MHz

GPIO_MODE_OUT_PP_LOW_FASTOutput push-pull, low level, 10MHz

GPIO_MODE_OUT_OD_LOW_SLOWOutput open-drain, low level, 2MHz

GPIO_MODE_OUT_PP_LOW_SLOWOutput push-pull, low level, 2MHz

GPIO_MODE_OUT_OD_HIZ_FASTOutput open-drain, high-impedance level,10MHz

GPIO_MODE_OUT_PP_HIGH_FASTOutput push-pull, high level, 10MHz

GPIO_MODE_OUT_OD_HIZ_SLOWOutput open-drain, high-impedance level, 2MHz

GPIO_MODE_OUT_PP_HIGH_SLOWOutput push-pull, high level, 2MHz

在这个应用中,需要把PD4设置为带上拉(因为按钮未按下时要呈高电平)、有中断的输入模式。开机时,PD3要设置为低电平的输出模式(低电平才能让Q1导通)。关机时PD3要设置为不带上拉的输入模式,所以这部分代码要这样写:

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_IT); //PD4设置为带上拉、有中断的输入模式

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); //开机时把PD3设置低电平的输入模

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//关机时把PD3设置低电平的输入模式

额外提一下,除了GPIO_Init函数可以设置引脚是输出高电平还是低电平,还可以用下面四个函数继续引脚的高低电平:

void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal)//输出PortVal指定的电平

void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//输出高电平

void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//输出低电平

void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins)//高低电平翻转一次


2)停机模式设置

STM8S单片机有停机模式,在停机模式下,单片机功耗降到最低,所有时钟停止工作,但可以保留RAM和寄存器的值,停机模式只能可以通过下面几种方式退出:

-外部中断(GPIO)

-CAN接收中断

-SPI传输结束

-I2C中断(从地址匹配)

-复位

通过执行HALT指令,也就是执行库函数的halt()函数进入停机模式。


3)设置外部中断

外部中断通过SetExtIntSensitivity函数设置:

void EXTI_SetExtIntSensitivity(EXTI_Port_TypeDef Port, EXTI_Sensitivity_TypeDef SensitivityValue)

其中Port是要设置外部中断的端口,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口;

SensitivityValue是外部中断类型,有以下几种取值,分别表示下降沿和低电平触发中断、上升沿触发中断、下降沿触发中断、上升沿和下降沿触发中断:

EXTI_SENSITIVITY_FALL_LOWInterrupt on Falling edge and Low level

EXTI_SENSITIVITY_RISE_ONLYInterrupt on Rising edge only

EXTI_SENSITIVITY_FALL_ONLYInterrupt on Falling edge only

EXTI_SENSITIVITY_RISE_FALLInterrupt on Rising and Falling edges

在这个应用中,按钮按下是产生下降沿,要选取EXTI_SENSITIVITY_FALL_ONLY模式。

设置中断模式后,还需要启用中断,使用enableInterrupts()函数启用。


4)外部中断处理程序

在ST官方提供的STM8S_StdPeriph_Lib库自带的模板中,中断处理程序都在stm8s_it.c中实现。stm8s_it.c中已经根据中断向量设置好了每种中断处理程序的入口函数。只需在相应函数中填入内容即可。

推荐阅读

史海拾趣

全智景(Allvision)公司的发展小趣事

在追求经济效益的同时,全智景公司也积极履行社会责任,致力于可持续发展。公司注重环保和节能技术的研发和应用,推出了多款绿色环保的产品。同时,全智景公司还积极参与社会公益事业,捐款捐物支持灾区重建和贫困地区的教育事业。这些举措不仅彰显了公司的社会责任感,也为公司的可持续发展奠定了坚实的基础。

通过以上五个故事,我们可以看到全智景公司在电子行业里的发展历程。从技术突破引领市场,到跨界合作拓展应用;从持续创新引领潮流,到全球化战略助力发展;再到履行社会责任与可持续发展。全智景公司以其坚定的信念和不懈的努力,在电子行业中取得了显著的成就。

Block USA Inc.公司的发展小趣事

Block USA Inc.最初以其线下支付业务Square在电子支付领域崭露头角。公司创始人杰克·多尔西洞察到小型商户在支付处理方面的需求,并推出了简单易用的磁条卡读卡器Square Reader。这一创新产品迅速受到市场欢迎,帮助无数小型企业和个体经营者实现了便捷、安全的电子支付。随着Square品牌的知名度不断提升,Block逐渐在支付领域建立了坚实的地位。

ETI Systems公司的发展小趣事

ETI Systems一直将产品品质视为企业的生命线。公司严格把控从原材料采购到产品生产的每一个环节,确保每一件产品都符合高标准的质量要求。正是这种对品质的执着追求,让ETI Systems的产品在市场上赢得了良好的口碑和广泛的认可。同时,公司也建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。

Edsun Laboratories Inc公司的发展小趣事

在竞争激烈的电子行业中,品质是企业生存和发展的关键。ECM Electronics Limited.深知这一点,始终将产品质量放在首位。公司建立了严格的质量管理体系,从原材料采购到产品生产、检测、包装等各个环节都严格把关,确保每一件产品都符合高标准的质量要求。正是凭借过硬的产品品质,ECM赢得了客户的信赖和市场的认可。

芯邦(Chipsbank)公司的发展小趣事

芯邦科技自成立以来,一直致力于半导体技术的研发与创新。在指纹识别领域,芯邦于2018年推出了业界首款超低成本、超低功耗的指纹识别控制芯片,该芯片集成了指纹传感器、算法处理器、蓝牙、主控和flash等模块,为指纹识别技术在非手机领域的广泛应用提供了强有力的技术支撑。这一创新不仅展示了芯邦在半导体设计领域的实力,也为其在指纹识别市场赢得了先机。

DSMI Electronics SA公司的发展小趣事

DSMI Electronics SA公司非常重视企业文化的建设和团队建设。公司倡导开放、协作、创新、务实的企业文化,鼓励员工积极参与技术创新和市场竞争。同时,DSMI还注重人才培养和引进,通过内部培训、外部招聘等方式,不断提升员工的素质和能力。这些努力为公司的持续发展提供了有力的人才保障。

问答坊 | AI 解惑

mmc程序验证可以

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 我用c51的可以  …

查看全部问答>

串联式开关电源储能滤波电感的计算-开关电源原理与设计(连载三)

1-2-3.串联式开关电源储能滤波电感的计算 从上面分析可知,串联式开关电源输出电压Uo与控制开关的占空比D有关,还与储能电感L的大小有关,因为储能电感L决定电流的上升率(di/dt),即输出电流的大小。因此,正确选择储能电感的参数相当重要。 ...…

查看全部问答>

usb serial 的问题

将usb设备口作为串口使用 1.PC端如果不按照同步软件能否与wince通信? 2.如果安装了同步软件,同步软件能否同步上?如果能,那么在usb作为串口被使用的时候能否同步上? 3.这种串口的速度最快速度能到多少?…

查看全部问答>

最新IT资讯群

从事asp.net的工作几年了,加入过好多技术交流群,这些群里,看到群主解答问题总是那么热心,很多的菜鸟却总是问些不经过大脑的问题,甚至有的连问题都问不清楚,给他教个上十遍却还是一个不会     于是本人今天开通了自己的技术交流群 ...…

查看全部问答>

智能手机时代 梦想照进现实

本帖最后由 jameswangsynnex 于 2015-3-3 19:56 编辑 9月25日,苹果的iPhone4手机在中国内地开始热卖。 “总有一天,所有的消费电子本质上都会变成手机。”早在今年年初,全球手机芯片龙头高通公司CEO保罗·雅各布博士就提出一个科幻般的推断。 ...…

查看全部问答>

空project?

哪里有类似 “工程模板 ”文件下载??从一个 大例子里面  一个一个去掉文件?大家都是如何 编写程序??每一次重新配置workspace,重复编写.s等?…

查看全部问答>

STM32是个好东西,就那技术手册看的太累。学stm32的一些基础

看中STM32的性价比,不过它的技术手册实在是不怎么地。如果刚从8位机转行过来的,得走不少弯路。如果是初学者,建议备好以下资料:stm32技术手册(STM32F10xxx_Reference_Manual,主要用一些外设寄存器)stm32f10xxx官方简介(stm32f103cn,主 ...…

查看全部问答>

帮忙推荐一款继电器

使用max038函数信号发生芯片时需要一组电容网络 对这个电容进行选段 有103 102 101三个电容现在我想通过IO口控制继电器来选择电容 3.3V的控制电压 继电器由ULN2003驱动 麻烦帮忙推荐一款继电器 谢谢~…

查看全部问答>

STM32串口问题

之前在IAR4.42下用STM32F103VCT6串口正常收发数据,后移植KEIL下,用STM32F100VBT6,其他功能正常,与主板通讯的串口发送数据不对,但接收数据正确,请问下是什么原因导致的?…

查看全部问答>

CCS连接目标板报错

一连接就报以下错误: Trouble Reading Memory Block at 0x802 on Page 2 of Length 0x1: Error 0x00000002/-2130 Error during: Memory,  Cannot access memory address at 0x00001004   Sequence ID: 65 Error Code: -2130 Error ...…

查看全部问答>