以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,秒的对比值设置为40alarm 子秒的配置
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);}
三星S20+ 5G真机曝光该机采用中置打孔屏设计
儿童电子产品设计之连接电路
多频多模 高通Gobi LTE芯片组演进大解析
kvm切换器的远程差距
英国计划新增6000个大功率快速充电站,扩大电动汽车充电基础设施规模
STM32 RTC Alarm的使用
接地极安装标准19条
东威电镀在PCB制造中采用工业机器人,组建自动化电镀生产线
高品质音调电路的制作
立讯精密收购和硕昆山工厂,将成为全球第二大iPhone组装商
工程师分享(一):照相机拍照功能实现源码
中国汽车售后维修市场规模逐年增长,2019年规模约为6770亿元
fpga为图形传感器提供接口让摄像头变聪明
超56万韩国5G用户重返4G:中国5G也面临着一个问题
带两个7段LED显示屏的PING的制作
BCD七段数码管显示译码器电路
详细分析LED产业的过去与未来
ESM-48100B5锂电池无法充电故障排查
电磁兼容EMC认证的常见6个问题
物联网技术都还在复苏期整体技术体系还尚未形成