关于stm8l05x系列单片机rtc初始化问题
在开始项目时,用到的单片机是stm8l052的单片机,为了降低功耗就要在活跃停止模式和正常运行模式之间切换,即每隔一段时间用rtc唤醒,在进行rtc初始化时,发现调用rtc的唤醒事件分频函数RTC_WakeUpClockConfig();和唤醒数值设置函数RTC_SetWakeUpCounter();无论怎么设置都是800ms左右进一次唤醒中断,即进中断的时间无法用函数设置,我是如下解决的:
1.查看官方库.c文件stm8l15x_rtc.c
如下图:
这是官方库中的两个函数的部分截图,上面函数注释部分翻译过来就是说在调用这个唤醒事件的相关初始化之前需要先将rtc的唤醒使能关闭,即先写上语句RTC_WakeUpCmd(Disable);再调用,如果不仔细看官方库英文注释很容易在这个地方卡半天。
2.修改代码
在调用函数RTC_WakeUpClockConfig和RTC_SetWakeUpCounter之前都加上一句RTC_WakeUpCmd(DISABLE);在初始化最后再加上一句RTC_WakeUpCmd(ENABLE);简而言之,在调用唤醒事件设置函数的时候关闭唤醒使能,设置完成之后再打开即可。最后说一下这个rtc唤醒事件中断时长的计算方法,先设置RTC的时钟(LSE或LSI),再进行唤醒事件分频得到唤醒频率,即调用函数RTC_WakeUpClockConfig,关于RTC_SetWakeUpCounter函数数值的计算,定时时长(你想要设置的时长)/分频周期(1/唤醒频率)-1。