当前位置:首页 > 单片机 > 单片机
[导读]Ⅰ、写在前面在某些低功耗的设备中,需要设备进入低功耗,且又需要间隔一定时间唤醒MCU,就需要有这么一个“AWU自动唤醒”定时自动唤醒的功能。在STM32中实现上面功能,常见的操作就是使用RTC来实现。但RTC每次进入低

Ⅰ、写在前面

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

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


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

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


作者:strongerHuang

版权所有,未经允许,禁止用于其它商业用途!!!

Ⅱ、AWU基础知识

AWU:AutoWakeUp,即自动唤醒

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());//校正LSI时钟

AWU_Init(AWU_TIMEBASE_1S); //初始化AWU

enableInterrupts(); //全局中断

}

提示:

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


其实细心的朋友会发现“控制/状态寄存器(AWU_CSR)”寄存器中的

AWUF自动唤醒标志位:

此位在自动唤醒模块产生中断时被置位,通过读AWU_CSR清零。写操作不影响次位的数值。

0:无自动唤醒中断

1:自动唤醒中断产生


“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


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

今天查看STM32资料时,对输出速度2M 10M 50M不是很了解,再加上移植ARF2496K程序到STM32时出现意外情况。一、STM8S端作为接收端和发送端时接收到的数据都正常。二、发送端(STM8S),接收端(ST...

关键字: io口 stm32f stm8s 输出速率

STM8S单片机开发环境由三大部分组成,包括PC机上的开发软件(集成开发软件、驱动程序等)、调试&编程器ST-LINK、目标单片机电路板。如下图所示:1、PC机上开发软件PC机上的软件包括:ST-LINK驱动程序...

关键字: stm8s 单片机入门 开发环境

一直理解STM8S定时器有点问题,所以在做定时器时候,出现了好奇怪的问题.比如,今次在理解预装载值时候出现问题,导致动态调整预装载值均无法得到自己预期的效果.我们可以看参考手册定时器这块的描述,或者上网找一些文章

关键字: stm8s 定时器溢出 重装载

Ⅰ、写在前面完事开头难,只要肯努力;师傅领进门,修行看个人;当你看到本文,说明你是幸运的,作者接下来推出的一系列STM8S教程,将助你踏入STM8S的世界。本文是STM8S教程的开始,写给刚入门STM8S的朋友。学习本文

关键字: gpio stm8s 基础知识

一、 STM8S 外部中断进行唤醒先了解一下STM8S的中断资源再看看STM8S的中断管理。STM8S采用软件优先级和硬件优先级来控制一个中断的响应,先比较软件优先级只有当软件优先级一致时才会比较硬件优先级,由于硬件优先...

关键字: stm8s 窗口看门狗 中断唤醒 定时唤醒

前面讲过两个常用的串口,UART和SPI,这次这次讲解一下另一个常用的串口:IIC(I2C)通信科普IIC:一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到...

关键字: iic stm8s 主机通信

因为没有中断的清除标志位,这一点与其它单片机是不同的。EXTI_CR1 触发边沿的设置要在总中断没开时才能写入!PD7 是 不可屏蔽的最高优先级的硬件中断(TLI)设置顺序:最好先关中断 设置边沿 开启引脚 最后开总中断...

关键字: stm8s 外部中断

// PXn引脚的初始化// 输出配置void GPIO_Init(void){PX_DDR |= 1

关键字: gpio stm8s 引脚功能

STM8 电源管理2012-06-08 22:47:55|分类:STM8|字号订阅默认情况下在系统或电源复位后,MCU处于运行模式。在这种模式下,CPU由fCPU提供时钟并执行程序代码,系统时钟分别为各个处于激活状态的外...

关键字: stm8s 停机模式 电源管理

1 打开STVP2 PROJECT/NEW,乱取个名来建立项目3 PROJECT EDITION,首先在Configuration选好芯片,最重要的就是在SerialNumbering中来设置了勾住Enable Seri...

关键字: stm8s 地址增量 烧写方法
关闭
关闭