STM8S AWU低功耗模式

2019-11-07来源: eefocus关键字:STM8S  AWU  低功耗模式


/**

  **********************************  STM8S  ***********************************

  * @文件名     : bsp_awu.c

  * @作者       : strongerHuang

  * @库版本     : V2.2.0

  * @文件版本   : V1.0.0

  * @日期       : 2017年05月10日

  * @摘要       : 自动唤醒源文件

  ******************************************************************************/

/*----------------------------------------------------------------------------

  ----------------------------------------------------------------------------*/

/* 包含的头文件 --------------------------------------------------------------*/

#include "AWU.h"

 

#include "stm8s_awu.h"

#include "stm8s_tim3.h"

/************************************************

函数名称 : AWU_LSIMeasurement

功    能 : LSI时钟测量

参    数 : 无

返 回 值 : 无

作    者 : strongerHuang

*************************************************/

uint32_t AWU_LSIMeasurement(void)

{

  uint32_t lsi_freq_hz = 0x0;

  uint32_t fmaster = 0x0;

  uint16_t ICValue1 = 0x0;

  uint16_t ICValue2 = 0x0;

 

  /* Get master frequency */

  fmaster = CLK_GetClockFreq();

 

  /* Enable the LSI measurement: LSI clock connected to timer Input Capture 1 */

  AWU->CSR |= AWU_CSR_MSR;

 

#if defined (STM8S903) || defined (STM8S103) || defined (STM8S003)

  /* Measure the LSI frequency with TIMER Input Capture 1 */

 

  /* Capture only every 8 events!!! */

  /* Enable capture of TI1 */

TIM1_ICInit(TIM1_CHANNEL_1, TIM1_ICPOLARITY_RISING, TIM1_ICSELECTION_DIRECTTI, TIM1_ICPSC_DIV8, 0);

 

  /* Enable TIM1 */

  TIM1_Cmd(ENABLE);

 

  /* wait a capture on cc1 */

  while((TIM1->SR1 & TIM1_FLAG_CC1) != TIM1_FLAG_CC1);

  /* Get CCR1 value*/

  ICValue1 = TIM1_GetCapture1();

  TIM1_ClearFlag(TIM1_FLAG_CC1);

 

  /* wait a capture on cc1 */

  while((TIM1->SR1 & TIM1_FLAG_CC1) != TIM1_FLAG_CC1);

  /* Get CCR1 value*/

  ICValue2 = TIM1_GetCapture1();

  TIM1_ClearFlag(TIM1_FLAG_CC1);

 

  /* Disable IC1 input capture */

  TIM1->CCER1 &= (uint8_t)(~TIM1_CCER1_CC1E);

  /* Disable timer2 */

  TIM1_Cmd(DISABLE);

 

#else  

  /* Measure the LSI frequency with TIMER Input Capture 1 */

 

  /* Capture only every 8 events!!! */

  /* Enable capture of TI1 */

  TIM3_ICInit(TIM3_CHANNEL_1, TIM3_ICPOLARITY_RISING, TIM3_ICSELECTION_DIRECTTI, TIM3_ICPSC_DIV8, 0);

 

  /* Enable TIM3 */

  TIM3_Cmd(ENABLE);

 

/* wait a capture on cc1 */

  while ((TIM3->SR1 & TIM3_FLAG_CC1) != TIM3_FLAG_CC1);

/* Get CCR1 value*/

  ICValue1 = TIM3_GetCapture1();

  TIM3_ClearFlag(TIM3_FLAG_CC1);

 

  /* wait a capture on cc1 */

  while ((TIM3->SR1 & TIM3_FLAG_CC1) != TIM3_FLAG_CC1);

    /* Get CCR1 value*/

  ICValue2 = TIM3_GetCapture1();

TIM3_ClearFlag(TIM3_FLAG_CC1);

 

  /* Disable IC1 input capture */

  TIM3->CCER1 &= (uint8_t)(~TIM3_CCER1_CC1E);

  /* Disable timer3 */

  TIM3_Cmd(DISABLE);

#endif /* STM8S903 || STM8S103*/

 

  /* Compute LSI clock frequency */

  lsi_freq_hz = (8 * fmaster) / (ICValue2 - ICValue1);

  

  /* Disable the LSI measurement: LSI clock disconnected from timer Input Capture 1 */

  AWU->CSR &= (uint8_t)(~AWU_CSR_MSR);

 

 return (lsi_freq_hz);

}

 

/************************************************

函数名称 : AWU_Initializes

功    能 : AWU自动唤醒

参    数 : 无

返 回 值 : 无

作    者 : strongerHuang

*************************************************/

void AWU_Initializes(void)

{

  AWU_LSICalibrationConfig(AWU_LSIMeasurement());//校正LSI时钟

  AWU_Init(AWU_TIMEBASE_30S);                     //初始化AWU

  enableInterrupts();

}

 

 

进入停机模式前可以关闭不需要的电源等,修改单片机IO口等。


halt();                    //进入停机模式


中断发生后要清除标志位:  AWU_GetFlagStatus();


可以与窗口看门狗一起用,但不能与独立看门狗一起用。

关键字:STM8S  AWU  低功耗模式 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479277.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STM8S FLASH与EEPROM读写操作
下一篇:STM8S103K3 I2C

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

STM8S003的GPIO模拟I2C切换输入输出的解决办法
刚开始学STM8,很多东西刚了解,正在做一个温湿度显示小板,就是使用I2C驱动SHT20传感器,并显示到数码管,数码管用的四位一体共阴数码管,STM8管脚有限,添加了一片TM1650做驱动,不过SHT20和TM1650都是用的I2C接口,由于对STM8硬件I2C还不了解,先打算用软件模拟,这就涉及到需要对GPIO做输入输出切换处理来检测ACK响应,刚开始,直接操作DDR寄存器,但是出现从输出切换到输入就会出现单片机死机,不解,查资料,得到一个解决办法,在输出状态时,可以不用切换到输入,我使用管脚D4,D5这两个管脚,这两个管脚比较特殊,就是真正开漏,在管脚描述为T,其它描述为HS(高吸收电流)。解决办法,将IO设置为开漏输出,外部
发表于 2019-11-11
STM8S103之IO复用
一、简介本文以STM8S103F3P6编程为例,介绍STM8S103F3P6如何引脚复用。二、实验平台电脑平台:Windows7 64位旗舰编译软件:IAR硬件平台:STM8S103F3P6三、版权声明四、实验前提1、在进行本文步骤前,请先安装IAR  EWSTM8-EV-1311版本;准备好STM8S103F3P6硬件平台。五、基础知识暂无六、源码地址暂无七、实验内容1.先阅读STM8S103F数据手册2.操作步骤以STM8S103F3P6的IO“PC6”为定时器1PWM输出为例:1)、配置定时器1为PWM输出void Init_Timer1(void){  GPIO_Init(GPIOC
发表于 2019-11-11
STM8S103之IO复用
STM8S_010_I2C读写EEPROM(硬件方式)
Ⅰ、写在前面相信看过前面那篇文章“更加深入理解I2C总线、协议及应用”的人对I2C都有一定的了解了。那篇文章是针对I2C,使用单片机IO模拟I2C方式实现读写操作。本文将讲述硬件I2C读写操作,也就是由处理器自身硬件的I2C实现时钟、数据的传输过程。Ⅱ、STM8硬件I2C知识STM8S的I2C模块不仅可以接收和发送数据,还可以在接收时将数据从串行转换成并行数据,在发送时将数据从并行转换成串行数据。可以开启或禁止中断。接口通过数据引脚(SDA)和时钟引脚(SCL)连接到I2C总线。允许连接到标准(最高100kHz)或快速(最高400kHz)的I2C总线。1.I2C的4种模式● 从设备发送模式● 从设备接收模式● 主设备发送模式
发表于 2019-11-09
stm8s105调试I2C记录
最近由于AR项目中调试LCOS需要用到STM8S105的mcu,本次主要是使用模拟I2C。1.IIC协议简介 IIC协议这里只做简要介绍,详细介绍可以百度了解,协议相对简单,主要有开始位,停止位,应答位,非应答位。开始位:当时钟为高,数据线由高变低停止位:当时钟位高,数据线由低变高。应答位:第9个时钟到来时,数据线为低。(这里第9个时钟,发送完一个字节,紧接着就是第9个时钟到来)非应答位,第9个时钟到来时,数据线为高。2.LCOS协议:1.发送数据:单数据发送: 开始位:写地址位(8bit):寄存器地址(16bit):数据(8bit):停止位多字节发送:开始位:写地址(8bit):寄存器地址(16bit):数据(8bit
发表于 2019-11-09
stm8s105调试I2C记录
STM8S103之GPIO
如何快速了解GPIO,查看Reference manual中GPIO章节,初步了解到GPIOGPIO输入分为:Floating Input和Input with pull-upGPIO输出分为:Open drain和pull-up(且pull-up时速率可以设置)GPIO复用功能如何选择,复用功能分为:Default alternate function和Alternate function after remap [optionbit]其中remap得知参考STM8S103的datasheet中的Option bytes,STM8S103中的Option bytes可以设置时钟,IO口的复用选择
发表于 2019-11-09
STM8S103之GPIO
STM8S MAX7219点阵模块驱动芯片程序
以下为.h文件:#ifndef __MAX7219_H#define __MAX7219_H#include "stm8s_gpio.h"#include "stm8s.h"#include <iostm8s103f3.h>#include <intrinsics.h>#include "tim1.h" #define uchar unsigned char#define uint  unsigned int#define count 8  void Init_MAX7219(void);void
发表于 2019-11-08
STM8S MAX7219点阵模块驱动芯片程序
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2019 EEWORLD.com.cn, Inc. All rights reserved