STM32 RTC Alarm的使用

发布时间:2024-01-18  

以STM32F072CB做的测试

官方参考应用文档:AN4759


RTC日历时钟配置

通过两个预分频得到1hz的时钟用来更新日历。

  • 异步预分频:PREDIV_A,7-bit(0-127)

  • 同步预分频:PREDIV_S,15-bit(0-32767)

频率计算公式如下:

Fck=Frtcclk/((PREDIV_A-1)*(PREDIV_S-1))

所以计算出PREDIV_A和PREDIV_S的值在配置时记得减1。

配置举例:

  • 比如选择LSI=40khz作为RTC的时钟源,要产生1hz的时钟,就可以配置PREDIV_A=39,PREDIV_S=999

  • 比如选择LSE=32.768khz作为RTC的时钟源,要产生1hz的时钟,可以配置PREDIV_A=127,PREDIV_S=255

为了产生1hz的时钟,分频值可以有多种组合,上面两种只是举例。如果用到alarm也要考虑下面描述的alarm子秒配置。

目标是产生1hz的时钟,当然也可以分频产生非1hz的时钟,只是那样RTC的日历不准而已。

RTC alarm

图片

设定Alarm可以配置多种对比域,每一个都可以单独被屏蔽:

  • 日期或者星期(二选一)

  • 小时

  • 分钟

  • 子秒(根据PREDIV_S预分频的值来确定分辨率)

这些参数分为两个寄存器来进行配置,一个是RTC_ALRMAR,另一个是RTC_ALRMASSR(这个专门负责子秒的alarm配置)

配置举例

  • 比如我现在只想在子秒匹配时候产生alarm,那么Mask4、Mask3、Mask2、Mask1位全部设置为1,正确配置Mask ss的值。

  • 在30分40秒的时候产生alarm,就把Mask2和Mask1设置为0,其他屏蔽位都配置为1。并把分的对比值设置为30,秒的对比值设置为40

Alarm 子秒的配置

图片

RTC alarm的日期、时、分、秒的比较值配置都比较简单,而子秒的配置就会稍微复杂一点。

子秒的比较值是在RTC_ALARMASSR中进行设置,对比的对象是RTC_SSR。

RTC_SSR是子秒的计数器,他的分辨率为:1/(PREDIV_S+1)秒,并且是向下计数的,当值减到0以后会重装载RTC_SPRE中的PREDIV_S。

alarm子秒配置举例:

首先确定RTC时钟源,比如使用的是LSI=40KHZ。

可以配置PREDIV_A=39,PREDIV_S=999 就可以获得日历1秒钟的时钟。

这样子秒的分辨率就为:1sec/(999+1)=1ms

alarm子秒的Mask位:

子秒的Mask位是使用了4bit,位于RTC_ALARMASSR[27:24],设置不同值会屏蔽不同的对比位,具体如下表。如果我们要子秒完全和RTC_SSR值进行对比,就配置MASKSS[3:0]=15

图片

RTC Alarm stm32cubemx配置:

激活日历和Alarm:

图片

配置两个分频值(要根据时钟源计算)

图片

设置Alarm相关的参数,这个要根据自己实际情况来配置。比如我只让子秒进行对比,日期、时、分、秒的屏蔽位都给使能了。设置的Sub Seconds值貌似是cubemx的一个bug,范围只允许0-59。所以生成工程以后我在代码里面手动改成了999

图片

把RTC的中断给使能了,让Alarm可以产生中断

图片

时钟配置不要忘记做选择,这里我使用LSI

图片

生成MDK工程编写代码

rtc.c中这里我手动修改成了999

图片

测试代码主要就是写一个RTC的中断回调函数放在main.c中就可以,在触发alarm的时候翻转LED

void HAL_RTC_AlarmAEventCallback(RTC_HandleTypeDef *hrtc)‘


{


  HAL_GPIO_TogglePin(LED2_GPIO_Port,LED2_Pin);


}


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>