STM8的AWU应用体会

发布者:真诚的友谊最新更新时间:2020-01-13 来源: eefocus关键字:STM8  AWU 手机看文章 扫描二维码
随时随地手机看文章

AWU——STM8中的精简RTC

今天使用STM8L001进行了类似RTC定时从停止模式唤醒MCU的实验。不知为何,在STM8S系列部分芯片(我没一个个去查看)和STM8L001、STM8L101等个别芯片上是没有RTC模块的,取而代之的是其阉割版 —— AWU模块。


因为只能配置自动唤醒闹钟,没有设置日历的功能。

这个AWU看文档配置起来极其简单,但实际操作起来还是有些坑的。我以实验用的STM8L001为例。

对AWU怎么启动的文档描述

文档说第一步要测量LSI的时钟频率。 后面的步骤在库文件的AWU_Init函数中都已经有了过程。


怎么测量LSI的时钟频率呢?

对LSI测量文档描述的步骤

这写的一堆是干嘛呢…我比较懒,就去库文件中找了找,发现了几个好东西。


在stm8l10x_tim2.c中有TIM2_ComputeLsiClockFreq函数直接用于测量LSI的频率。

在stm8l10x_awu.c中有AWU_LSICalibrationConfig函数用于使用测得的LSI频率配置AWU_APR寄存器

TIM2_ComputeLsiClockFreq的原型是:

/**

  * @brief  Compute the frequency of the LSI clock expressed in Hertz.

  * @note   The timer clock must be a high speed clock: HSI or HSE

  * @note   It is recommended to use the maximum clock frequency, that is 10 MHz,

  *         to obtain a more precise result.

  * @param  TIM2_TimerClockFreq The TIM2 clock frequency expressed in Hertz.

  * @retval LSI Clock Frequency value.

  */

uint32_t TIM2_ComputeLsiClockFreq(uint32_t TIM2_TimerClockFreq)

{

...

}


注释中写明参数是:TIM2用Hz表示的时钟频率。


而刚开始我就脑抽的以为是自己配置分频的TIM频率,结果怎么传都得不到数值。这里应该是系统时钟CLK_GetClockFreq函数获得的值传进去。


在TIM2_ComputeLsiClockFreq的前面需要做上图步骤的第一步,把AWU_CSR的MSR bit置有效;测量后失能MSR bit。


用AWU_LSICalibrationConfig配置好AWU_APR寄存器。


用AWU_Init函数初始化AWU的唤醒间隔时间。


每次自动唤醒后都会进入INTERRUPT_HANDLER(AWU_IRQHandler,4)中断服务函数,所以需要在这里使用AWU_GetFlagStatus清除标志。


使用halt函数让MCU进入类似STOP模式,就可以等它到了设定的间隔时间自动唤醒了。


这里说一点比较坑的,我使用例程的同时,自己写了AWU_Config()函数。由于并不知道例程的GPIO_Config()里打开了一次全局中断,于是我在GPIO_Config()后面加上了自己的AWU_Config()函数,开始也没什么问题,但调试时发现时不时出现测量的LSI频率值在检查参数合法性时就会报错。


一直很纳闷,起初以为是测量的步骤有问题,还在上述第①步之后加了延时,发现没有效果。


于是尝试把AWU_Config()换个地方初始化,当放到TIM4_Config()前面时调试就没出现问题了,我又以为是TIM4的1ms中断引起的问题,而放到TIM4_Config()后面发现也没问题,进去GPIO_Config()看了看终于知道了…

GPIO_Config()的过程

如下图中把对AWU的初始化放在箭头位置都不合适,两个地方的全局中断都已开启,会对LSI的测量结果有影响

main的初始化过程

从halt执行后的功耗消耗、留下运行的外设和支持唤醒的方式,我认为是让MCU进入类似STM32的STOP模式了,有没有小伙伴有其他看法呢?可以评论中说说想法 ~,放上STM8和STM32的低功耗模式详情表作参考。

STM8部分的Low power modes

STM8部分的Low power modes

STM32F1的Low power modes

STM32F1的Low power modes

关键字:STM8  AWU 引用地址:STM8的AWU应用体会

上一篇:STM8S PWM 应用 呼吸灯
下一篇:STM8S003F3使用总结——定时器

推荐阅读最新更新时间:2024-11-01 10:30

stm8 Error[Li005]: no definition for XXX 的解决办法
之前gpio.c文件有问题,重新在根文件夹/inc /src中添加了一个新的gpio.c,然后我在 stm8_board.c文件中编写串口函数,编译时报错 Error : no definition for”GPIO_Init“ 意思是:我没有定义这个GPIO_Init()函数?不可能啊??????????????????? 我检查了头文件,gpio.c中定义了,gpio.h中也声明了为啥说我没定义不让我调用???????????? 经检查发现:我添加c文件时没有Make 发现.c文件里有个#endif 然后把那行删去 (.C文件有问题) 编译成功
[单片机]
<font color='red'>stm8</font> Error[Li005]: no definition for XXX 的解决办法
STM8 ICP和IAP
在线编程(ICP)用于更新STM8整个存储器的内容。ICP使用SWIM接口把用户的程序装载到微控制器中,同时提供迅速而有效的设计迭代并且去除了不必要的封装处理和器件插槽。SWIM接口(单线接口模块)使用SWIM引脚和编程工具相连接。 相对于ICP方式,在应用编程(IAP)可使用STM8支持的任意通讯接口(I/O、I2C、SPI、UART )来下载要编入存储器中的数据。IAP允许在应用程序运行中对FLASH程序存储器的内容重新编程。然而要想使用IAP,必须通过ICP对FLASH程序存储器预先编程。请参考STM8 Flash编程手册(PM0051)和STM8 SWIM通信协议和调试模块用户手册(UM0470)来了解关于编程步骤的
[单片机]
<font color='red'>STM8</font> ICP和IAP
基于STM8系列8位通用MCU的电容式触摸感应方案
1引言 相较于机械式按键和电阻式触摸按键,电容式触摸按键不仅耐用,造价低廉,机构简单易于安装,防水防污,而且还能提供如滚轮、滑动条的功能。但是电容式触摸按键也存在很多的问题,因为没有机械构造,所有的检测都是电量的微小变化,所以对各种干扰敏感得多。ST 针对家电应用特别是电磁炉应用,推出了一个基于 STM8 系列 8 位通用微控制器平台的电容式触摸感应方案,无需增加专用触摸芯片,仅用简单的外围电路即可实现电容式触摸感应功能,方便客户二次开发。 2 方案介绍 ST 的电容式触摸按键方案通过一个电阻和感应电极的电容 CX 构成的阻容网络的充电 / 放电时间来检测人体触摸所带来的电容变化。如图 1 所示,当人手按下时相当于感应电极上并
[单片机]
基于<font color='red'>STM8</font>系列8位通用MCU的电容式触摸感应方案
STM8内部EEPROM的使用
@eeprom u8save ={5,4,3};//大括号内为初始值,初始值只在仿真器仿真时才会起作用 u8 *pSave = (u8 *)&save ;//对EEPROM数据区进行写操作时必须使用指针访问 void main() { do { FLASH_Unlock(FLASH_MEMTYPE_DATA); }while((FLASH- IAPSR & FLASH_IAPSR_DUL) == 0);//等待DATA EEPROM区解锁 *pSave = *pSave+1; //save =save +1;//对EEPROM数据区进行写操作时不能使用直接访问,仅可用地址间接访问,原因:可以比较和上面一句的汇编代码 while((
[单片机]
STM8 IAR不识别ST-LINK V2问题解决
以前一直玩STM32,淘宝推荐发现STM8S103F3P6最小系统板3.6元一个,就买回来玩玩了。一值用Keil,现在改IAR,安装IAR for STM8,但是发现 the debugging session could not be started,Either the debugger initialization failed,or else the file D…hex was corrupt or of an unsupported format. There might be more information in the Debug Log window 没办法就找百度吧,有的说改成STM8S003,STM
[单片机]
STM8单片机STVD环境新建工程笔记
1.新建1个工程目录,依项目的名字来起 2.在上述的目录内新建1个名为STVD的目录,因我们用ST官方的开发环境来新建的工程,故命名如此。 3.在STVD目录内新建名为cosmic的目录,此目录为编译器和工程设置的目录,非常重要。 4.在STVD的目录内,同样新建名为lib和src的两个目录,前者为库文件目录,后者为自己写的源文件路径。 5.在lib的目录内新建名为inc和src的两个子目录。 6.将在ST官网上下载到的最新版的库文件的inc和src目录复制到STVD的lib目录下,详见下图。 7.复制完库文件以后STVDlibinc目录如下 8.复制完库文件以后STVDlibsrc目录如下 9.打
[单片机]
<font color='red'>STM8</font>单片机STVD环境新建工程笔记
STM8的TIM1实现流水灯实验(使用外部时钟)
实现内、外部时钟自动切换,可观察外部时钟失效的效果(外部时钟变换快、内部时钟变换慢)。时钟初始化程序如下: void CLK_Init(void) { //CLK_CKDIVR &= ~0x10;//时钟分频寄存器 //CLK_CKDIVR |= 0x01; CLK_ECKR=0x03;//外部时钟寄存器 外部时钟准备就绪,外部时钟开 CLK_SWCR=0x02;//切换控制寄存器 使能切换机制 CLK_SWR=0xB4;//主时钟切换寄存器 选择HSE为主时钟源 while (!(CLK_SWCR & 0x08)); /* Wait for switch done 该语句如果没有则不能切 换成功,
[单片机]
IAR FOR STM8 简单使用教程
一、创建工程 1.先创建一个workplace.选择File New Workplace 2.创建一个新的工程,选择Project Creat New Project,如果用的是IAR FOR STM8 就默认无需更改。保存并输入Project名字,在workplace窗口中显示如下 3.在添加文件到工程之前,先保存Workplace。并输入保存的名字,Workplace的扩展名是eww。 4.添加文件到工程. (1)右击工程名 ADD ADD FILES添加 .c文件 (2)添加头文件文件夹路径:右击工程名 Options C/++compiler PreProcessor中加入头文件所在文件夹的路径 例如: $
[单片机]
IAR FOR <font color='red'>STM8</font> 简单使用教程
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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