你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

关于stm8 Alarm唤醒设置不成功的问题

[复制链接]
假面具 发布时间:2018-8-21 19:26
因为项目需求,要让 STM8L052 单片机在指定时间唤醒,如果使用计数器唤醒,会累积误差,所以只能使用 Alarm唤醒功能,测试了几天,一直两天发现单片机可以唤醒,只是并不是在指定时间唤醒的,唤醒时间是随机的,毫无规律,难道是STM8的Alarm唤醒功能不能用?应该不会。) n$ i) Z1 d$ z# J
看了看手册,使用Alarm唤醒功能设置的是RTC_ALRMARx寄存器+ G- v" |5 O5 o2 c* r! c1 S' ?
TIM截图20180821184138.png
  ~' B3 g: Y, m该寄存器最高位 MSK1位如果置位就是不比较,假设 RTC_ALRMAR1最高位为1,RTC_ALRMAR2,RTC_ALRMAR3,RTC_ALRMAR4最高位为0,当RTC时钟与ALARM设置日期,小时,分钟重合时,Alarm才会唤醒单片机,如果唤醒后立刻进入休眠模式,那么就会在这一分钟一秒唤醒一次。
; ?/ A3 c4 n) D4 U' y我要做的功能就是使用ALARM唤醒功能一小时在指定的时间唤醒 6 次,使用库函数设置一下就可以,每次唤醒改下 RTC_ALRMAR2 的值,寄存器设置为每小时唤醒一次,运行起来发现和理论上的情况不一致。1 y* k8 R% ]% l' x4 K
看了下库函数,库函数是这么写的,四个设置ALARM功能的寄存器,每次只能设置一个寄存器最高位为1,例如 RTC_ALRMAR3最高位设置为1,其他三个设置ALARM唤醒的寄存器最高位仍是0,RTC_ALRMAR4设置的这一天,每小时 RTC_ALRMAR2设置的 分钟 RTC_ALRMAR1设置的 秒,单片机会唤醒一次,我想要的不是这个结果,并且这么设置单片机也不会在指定的时间唤醒。
' V! N6 h3 T. B& D- \2 I* Q' x于是在库函数 RTC_SetAlarm 函数 增加了几条语句(红框内的语句)* T; Y! M3 l4 ~. {- H
TIM截图20180821191632.png
8 Y: F7 |/ }: `& f1 F, B* K红框内这么处理的, 例如:如果RTC_ALRMAR3最高位为1,那么RTC_ALRMAR4最高位也为1,意思为如果设置为1小时唤醒一次,那么不管哪一天都会每小时唤醒一次,其他的 if 内处理类似,下载到板子里测试成功,可以做到每小时在指定时间唤醒6次。# h4 d1 g4 V8 y' P

+ U; o' L. F% f! {# p: F+ Y* s
收藏 评论3 发布时间:2018-8-21 19:26

举报

3个回答
hanyc4st 回答时间:2018-8-22 18:23:23
zero99 回答时间:2018-8-31 18:02:19
谢谢分享
纯牛奶yq 回答时间:2019-4-11 15:32:55
楼主 ,你说的唤醒是从halt模式下唤醒吗。一直没能用alarm中断唤醒

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版