0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM8S_ 006_AWU自动唤醒

黄工的嵌入式技术圈 来源:黄工的嵌入式技术圈 2020-03-20 10:12 次阅读

AWU是STM32中没有的功能

写在前面 Ⅰ

在某些低功耗的设备中,需要设备进入低功耗,且又需要间隔一定时间唤醒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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Auto
    +关注

    关注

    0

    文章

    42

    浏览量

    15261
  • PDF
    PDF
    +关注

    关注

    1

    文章

    166

    浏览量

    33654
  • STM8S
    +关注

    关注

    16

    文章

    149

    浏览量

    31357
收藏 人收藏

    评论

    相关推荐

    干货分享 | TSMaster—LIN 唤醒与休眠机制

    在汽车总线中常见的唤醒方式有硬线唤醒、网络唤醒和特定信号唤醒,而LIN总线则是通过休眠帧与唤醒电平来实现的,本文将介绍LIN的
    的头像 发表于 09-25 08:03 1349次阅读
    干货分享 | TSMaster—LIN <b class='flag-5'>唤醒</b>与休眠机制

    请问stm8l怎么实现外部中断唤醒

    stm8l怎么实现外部中断唤醒?求大神们帮忙。
    发表于 05-17 08:08

    STM8S103K在停机模式且关闭flash时有时候不能唤醒是怎么回事?

    STM8S103K 在停机模式且关闭flash 时有时候不能唤醒! 做一个产品,电池供电,有一个电源按键用来开关机,长按2秒就执行。用的是PE5外部中断来唤醒。 假如我设置:FLASH_CR1
    发表于 05-17 06:55

    求助,关于stm8s的halt模式问题求解

    新手做stm8的小东西,芯片是stm8s103f3,做的糊里糊涂的,问题如下: 用到了halt模式,仿照网上已有的一些资料写了点东西,但进入halt关掉的一些东西(time,adc等),在外部中断
    发表于 05-15 08:12

    用STM8S003f3p6的PD3和PB5做外部中断,仿真关掉后,PD3一直唤醒不了的原因?

    我用STM8S003f3p6的PD3和PB5做外部中断,下降沿触发,用来唤醒睡眠,在仿真的状态下,没有问题,两个都可以唤醒,仿真关掉后,芯片在工作的状态下,只有PB5可以唤醒,PD3不
    发表于 05-13 07:44

    stm8s halt之后无法唤醒怎么解决?

    我用的是003f3p6,现在遇到一件很奇怪的事,在连接STLINK的时候,单片机可以很正常地从halt模式中唤醒,但是如果不连接的话,就会无法唤醒,不知道有人遇到过同样的情况吗?求帮助!
    发表于 05-08 08:18

    stm8s208 halt can唤醒不了的原因?

    最近在使用stm8s208的can模块,涉及到低功耗,在总线上没有数据时mcu进入halt,总线上有数据时被唤醒,进行通信。 初始化配置中我使能了AWUM,唤醒中断也使能了WKUIE;mcu进入halt后,RXD上有波形但是mc
    发表于 05-08 07:53

    stm8低速时钟校准的疑问求解

    ;= ((lsifreqkhz - (4U * A)) *(1U + (2U * A)))) { AWU->APR = (uint8_t)(A - 2U); } else { AWU->APR = (uint
    发表于 05-08 07:10

    STM8可以设置类似停机模式下闹铃唤醒吗?

    请问STM8可以设置类似停机模式下闹铃唤醒吗,比如每天8点钟从停机模式唤醒
    发表于 05-08 07:09

    stm8s halt自唤醒长时间搁置Timer出错的原因?

    AWU时钟 //唤醒时间2.00S AWU_TBR = 0x0D; AWU_APR = 0x3E; //分频Fls
    发表于 05-08 06:53

    STM8L101内部38K LSI校准不起作用吗?

    STM8L101 内部38K LSI校准不起作用吗? 实测加不加LSIMeasurment(),定时1S ,抓出来的时间都一样。下面是官方代码稍加修改的。 INTERRUPT_HANDLER
    发表于 04-24 07:15

    请问STM8L101怎么使用AWU功能进行长时间延时?

    目前导师的项目需要CPU进行定时唤醒,几小时自动唤醒然后发送数据帧,硬件设计师选用的STM8L101,我看了手册和官方历程,知道了AWU功能
    发表于 04-22 07:47

    请问STM8SAWU功能的时钟源能使用外接的32.768KHZ晶振吗?

    请问大神,STM8SAWU功能的时钟源能使用外接的32.768KHZ晶振吗?
    发表于 04-16 08:07

    STM8S活跃停机模式使用红外中断唤醒无法正确识别中断的原因?

    如题所述: STM8S设置成活跃停机模式,使用红外下降沿唤醒并解码,IO具体配置为,PC4浮空输入,外部上拉,下降沿触发。 8M外部晶振,TIM2 32分频 2us时基 无溢出中断,用于两个下降沿
    发表于 04-15 07:46

    DCM模块唤醒网络主动与被动唤醒机制探讨

    CanNm专题机从Prepare Bus-Sleep Mode切换到Nework Mode的Repeat Message State是如果是通过CanNm_PassiveStartUp()条件切换的就是被动唤醒,如果是通过CanNm_NetworkRequest()条件切换的就是主动
    发表于 03-15 11:20 895次阅读
    DCM模块<b class='flag-5'>唤醒</b>网络主动与被动<b class='flag-5'>唤醒</b>机制探讨