STM8S_ 006_AWU自动唤醒

发布者:乐呵的挑最新更新时间:2020-07-12 来源: 51hei关键字:STM8S  AWU  自动唤醒 手机看文章 扫描二维码
随时随地手机看文章

写在前面 Ⅰ


在某些低功耗的设备中,需要设备进入低功耗,且又需要间隔一定时间唤醒MCU,就需要有这么一个定时“AWU自动唤醒”的功能。


在STM32中实现上面功能,常见的操作就是使用RTC来实现。但RTC每次进入低功耗之前都需要配置一下RTC,而STM8独特的AWU功能只需要简单的初始化配置即可。


为方便大家阅读,本文内容已经整理成PDF文件:

http://pan.baidu.com/s/1i5uWhJR

AWU基础知识 Ⅱ

AWU:Auto WakeUp,即自动唤醒

AWU是用来当MCU进入低功耗的活跃停机(Active Halt)模式时提供一个内部的唤醒时间基准。该时间基准的时钟是由内部的低速RC振荡器时钟(LSI)或者通过预分频的HSE晶振时钟来提供的。


LSI低速内部时钟测量

在使用LSI低速内部时钟时,为了确保最好的精度,它的频率可以通过TIM3的输入捕捉1来测定。


AWU操作

为了使用AWU功能,按顺序执行如下步骤:

1. 使用AWU_CSR寄存器的MSR位和TIM1/3的输入捕捉通道1来检测LS的时钟频率(对精度要求不高,该步骤可省略);

2. 通过写AWU_APR的APR[5:0]位来定义适当的预分频值;

3. 通过写AWU_TBR的AWUTB[3:0]来选择需要的自动唤醒延时;

4. 置位AWU_CSR 的AWUEN位;

5. 执行HALT指令。


提示: 

计数器仅仅在HALT指令之后MCU进入活跃停机模式时才开始计数(请参考电源管理的活跃停机模式章节), AWU中断同时被使能。


预分频计数器仅仅在APR[5:0]值不同于它的复位值0x3F值时才开始计数。


LSI低速内部时钟频率检测

在经过出厂校验后,在全温度范围内低速内部RC(LSI)振荡器的频率离散性是128 kHz +/-12.5%。为了获得精确的AWU时间间隔或者蜂鸣器输出,必须精确测量LSI频率。本文提供的两个工程代码中有一个是校正过的,有一个没有校正。


可采用如下的步骤:

1. 将AWU_CSR的MSR位置1来把LSI的内部时钟连接到TIM1/3定时器的ICAP1;

2. 通过定时器的输入捕捉中断来测量LSI的时钟频率;

3. 到向AWU_APR的 APR [5:0] 位写入一个适当的值来调整AWU定时间隔到期望的时间间隔。AWUTB[3:0]位可以被更改来选择不同的时间间隔。


软件工程源代码 Ⅲ

1、关于工程

本文提供的工程代码是基于前面软件工程“STM8S_Demo”增加AWU修改而来。初学的朋友可以参看我前面对应的基础文章,那些文章讲的比较详细。


工程源代码主要实现功能:配置AWU定时1秒,让MCU从停机模式自动唤醒,改变LED状态;然后又进入停机模式,以此循环下去。


本文重点讲述关于AWU的内容:

AWU_LSICalibrationConfig:LSI低速内部时钟校正配置

AWU_Init:AWU初始化配置


2.代码分析说明

A.AWU_LSICalibrationConfig:时钟校正配置

关于时钟的校正,如果要求不是很高,可以省略该步骤。从上面的说明可以看得出来,是通过定时器来实现的。


我们提供例程通过TIM1/3捕获功能(该功能在后面文章会讲述)测量LSI的时钟,具体请看我提供例程的“AWU_LSIMeasurement”函数,该函数测量得到的LSI时钟,结合“AWU_LSICalibrationConfig”函数即可校正。


B.AWU_Init(AWU_TIMEBASE_1S):定时1秒AWU

通过上面的描述,大家或许初学的朋友还不能完全理解(上面的描述是针对寄存器的描述),但可以通过代码很直接的明白其意思,我们这里结合的是ST提供的标准外设库,具体可以跟踪代码看见,其实里面的内容就是上面所描述的。


void AWU_Initializes(void)

{

AWU_LSICalibrationConfig(AWU_LSIMeasurement());

AWU_Init(AWU_TIMEBASE_1S);

enableInterrupts();

}


提示:

很多人不明白为什么这里要配置中断?

其实细心的朋友会发现寄存器“控制/状态寄存器 (AWU_CSR)”中的“AWUEN自动唤醒使能位”,这一位的功能如下:

此位由软件置位和清零。由此位使能自动唤醒功能。如果MCU进入Active-halt或 Wait 模式,则自动唤醒模块按照预先编程设置延时一段时间唤醒MCU。


0:禁止自动唤醒功能

1:使能自动唤醒功能


因此,我们还需要在中断函数(stm8s_it.c)里添加代码:

INTERRUPT_HANDLER(AWU_IRQHandler, 1)

{

AWU_GetFlagStatus();

}


这一句主要的功能是清除标志位。

下载 Ⅳ

STM8S资料:

http://pan.baidu.com/s/1o7Tb9Yq

软件源代码工程(STM8S-A06_AWU自动唤醒xxx):

http://pan.baidu.com/s/1c2EcRo0

关键字:STM8S  AWU  自动唤醒 引用地址:STM8S_ 006_AWU自动唤醒

上一篇:STM8S_005_ ADC采集单通道电压
下一篇:STM8S_ 007_片内FLASH和EEPROM编程

推荐阅读最新更新时间:2024-11-13 12:30

STM8S 使用IAR在线调试配置
STM8S103单片机使用IAR进行程序开发和调试 1.在程序调试没有错误后 选择 “Options” 进行配置 2.选择配套的单片机型号 3.配置库文件路径、宏定义头文件 4.选择“Debugger”选项“ST-LINK” 5.选择其中一个进行在线调试 注:两种调试模式的区别 Flash调试和RAM调试 1)Debug with Downloading: Downloads the application and starts C-SPY so that you can debug the project object file. If necessary, a make will be perf
[单片机]
<font color='red'>STM8S</font> 使用IAR在线调试配置
IAR STM8S及STM32整合
今天在移动硬盘的系统上安装IAR的两个版本,惊奇地发现两个版本的路径竟然指向同一个路径,连注册工具都是同一个。 有图有真相, 上图: 由于注册工具整合到一起了,所以每次打开注册信息都包含有两个版本的注册内容。注册时,只要选择对应的版本的注册项就好了。 上图,我注册成功的例子
[单片机]
初识STM8S的电源管理
丰富的片上设备模块和可配置熔丝选项是AVR强过老一辈MCU的优势之一。不过STM8S出世以后,AVR的这一优势就有点光环顿失了。 下面是我对电源管理部分的理解,这是我看过STM8S手册和STM8S20X器件资料后的初步认识。 除了运行模式,可以采用以下三种低功耗模式:等待、主动停机、停机。 1)等待(Wait)模式:CPU停止工作,片上设备可以选择被关断,任意内部外部中断及复位均可唤醒,耗电2.4mA@24MHz,5v。 2)主动停机模式(Active Halt):保留一个定时唤醒单元AWU工作,CPU和片上设备全停止工作,AWU和外部中断及复位均可唤醒,耗电11uA - 1000uA,取决于片上稳压器(MVR还是LPV
[单片机]
STM8S之TIM4自学笔记
TIM4是STM8S系列单片机中的8位基本型通用定时器 TIM4相关寄存器 控制寄存器1(TIM4_CR1) 中断使能寄存器(TIM4_IER) 状态寄存器(TIM4_SR) 事件产生寄存器(TIM4_EGR) 计数器(TIM4_CNTR) 预分频寄存器(TIM4_PSCR) 自动重装载寄存器(TIM4_ARR) TIM4初始化 1、设置预分频寄存器 2、设置自动重装载寄存器 3、开定时器更新中断 4、开总中断 asm( rim ); IAR中开总中断 5、计数器工作 void TIM4_Init() { TIM4_PSCR=0X03;// 预分频2MHz/2^3=250KHz TIM4_IER=0X01;//开定时器
[单片机]
STM8S之时钟切换自学笔记2
上一次是自动切换,这次写下手动切换 主要寄存器 CLK_SWCR CLK_SWR CLK_CMSR 手动切换 1、CLK_SWR写入u8值,CLK_SWCR中 SWBSY硬件置位 2、用户软件等待至目标时钟稳定,CLK_SWCR SWIF含义取决于SWEN位的状态,目标时钟源是否稳定,如果SWIEN为1,则产生一个中断 3、在用户软件所选时间点、设置CLK_SWCR中的SWEN,执行切换 #include stm8s.h #define uint unsigned int void Delay(uint x) { while(x--); } void main() { // u8 i; GPIO_Init( GPIOG
[单片机]
STM8S AD转换
//不说那么多了,直接上程序 void ADC1_DeInit(void) { ADC1- CSR = ADC1_CSR_RESET_VALUE; ADC1- CR1 = ADC1_CR1_RESET_VALUE; ADC1- CR2 = ADC1_CR2_RESET_VALUE; ADC1- CR3 = ADC1_CR3_RESET_VALUE; ADC1- TDRH = ADC1_TDRH_RESET_VALUE; ADC1- TDRL = ADC1_TDRL_RESET_VALUE; ADC1- HTRH = ADC1_HTRH_RESET_VALUE; ADC1- HTRL = ADC1_
[单片机]
STM8S IO口基本输入输出
GPIO主要功能 ● 端口的各个位可以被单独配置 ● 可选择的输入模式:浮动输入和带上拉输入 ● 可选择的输出模式:推挽式输出和开漏输出 ● 数据输入和输出采用独立的寄存器 ● 外部中断可以单独使能和关闭 ● 输出摆率控制用以减少EMC噪声 ● 片上外设的I/O功能复用 ● 当作为模拟输入时可以关闭输入施密特触发器来降低功耗 ● 在数据输出锁存时支持读-修改-写 ● 输入兼容 5V电压 ● I/O口工作电压范围为1.6 V 到VDDIOmax STM8S的IO口相关的寄存器 端口 x 输出数据寄存器 (Px_ODR) Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0 P
[单片机]
终于搞定STM8S的活跃停机电流11uA
如果你象其它单片机一样,开启了AWU,然后来一句halt(); 那么此时的电流为200uA左右,到此差不多心灰意冷,STM8S这么差劲儿! 仔细阅读《STM8S系列MCU功耗管理》,它的电源分为MVR和LPVR,也搞不懂ST的科学家们为什么单片机在halt()时直接变为LPVR供电算了,非要手动设一下,通过设置内部时钟寄存器CLK_ICKR 的REGAH位可实现此功能 CLK_SlowActiveHaltWakeUpCmd(ENABLE); 经过这么一整,电流有改进,在69uA,和官方的PDF的68uA很接近,但仍不能满足电池供电需求,官方PDF活跃停机电流为 11uA@5V 9uA@3.3V ,再仔细读,原来必须要关闭F
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
更多往期活动
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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