
接下来我们介绍下如何使用库函数对 STM32F1 的 RTC 进行配置。这个也是在编写程序中必须要了解的。具体步骤如下:(RTC 相关库函数在 stm32f10x_rtc.c和 stm32f10x_rtc.h 文件中) (1)使能电源时钟和后备域时钟,开启 RTC 后备寄存器写访问要访问 RTC和 RTC 备份区域就必须先使能电源及后备域时钟,然后使能RTC 后备区域访问。电源时钟使能,通过 RCC_APB1ENR 寄存器来设置;RTC 及RTC 备份寄存器的写访问, 通过 PWR_CR 寄存器的 DBP 位设置。调用库函数为:
(2)复位备份区域,开启外部低速振荡器 在取消备份区域写保护之后,我们可以先对这个区域复位,以清除前面的设置,当然这个操作不要每次都执行,因为备份区域的复位将导致之前存在的数据丢失,所以要不要复位,要视情况而定。然后我们使能外部低速振荡器,注意这里一般要先判断 RCC_BDCR 的 LSERDY 位来确定低速振荡器已经就绪了才开始下面的操作。备份区域复位的库函数为:
开启外部低速振荡器的函数是:
(3)选择 RTC 时钟,并使能 选择 LSE 为 RTC 时钟源库函数是:
使能 RTC 时钟库函数是:
(4)设置 RTC 的分频以及配置 RTC 时钟 在开启了 RTC 时钟之后,我们要做的就是设置 RTC 时钟的分频数,通过 RTC_PRLH 和 RTC_PRLL 来设置,然后等待 RTC 寄存器操作完成,并同步之后,设置秒钟中断。然后设置 RTC 的允许配置位( RTC_CRH 的 CNF 位),设置时间(其实就是设置 RTC_CNTH 和 RTC_CNTL 两个寄存器)。 在进行 RTC 配置之前首先要打开允许配置位(CNF),调用的库函数是:
在配置完成之后,千万不要忘记更新配置同时退出配置模式,调用的库函数是:
设置 RTC 时钟分频数,调用的库函数是:
这个函数只有一个参数,就是 RTC 时钟的分频数,很好理解。然后是设置秒中断允许,RTC 使能中断的函数是:
函数的第一个参数用来选择 RTC 的中断类型,可通过库文件的头文件查看,第二个参数用于使能还是失能。比如要使能 RTC 秒中断,如下:
接下来便是设置时间了,设置时间实际上就是设置 RTC 的计数值,时间与计数值之间是需要换算的。库函数中设置 RTC 计数值的方法是:
(5)更新配置,设置 RTC 中断分组 在设置完时钟之后,我们将配置更新同时退出配置模式,这里还是通过RTC_CRH 的 CNF 来实现。调用库函数的方法是:
在退出配置模式更新配置之后我们在备份区域 BKP_DR1 中写入 0XA0A0 代表我们已经初始化过时钟了,下次开机(或复位)的时候,先读取 BKP_DR1 的值,然后判断是否是 0XA0A0 来决定是不是要配置。接着我们配置 RTC 的秒钟中断,并进行分组。 往备份区域写用户数据的函数是:
函数的第一个参数用来设置备份寄存器的标号, 这个在 rtc 库文件头文件内有定义,第二个参数是我们往备份寄存器写入的数据。比如我们向 BKP_DR1 中写入 0XA0A0。函数如下:
同样库函数还提供一个读取备份寄存器内容的函数,如下:
函数参数作用和写备份寄存器是一样的功能,这个很好理解。 使能中断后, 就需要设置 RTC 的中断优先级, 即调用 NVIC_Init 函数初始化,这个在前面很多章节中都介绍过,这里不多说。 (6)编写 RTC 中断服务函数 前面步骤中我们配置好了RTC 的秒中断, 所以我们还需要编写对应的中断服务函数。RTC 中断服务函数名在 STM32F1 启动文件内可以查找到,RTC 中断函数名如下:
因为 RTC 的中断类型有很多,所以进入中断后,我们需要在中断服务函数开头处通过读取 RTC 状态寄存器的值判断此次中断是哪种类型, 然后做出相应的控制。库函数中用来读取 RTC状态标志位的函数如下:
参数 RTC_FLAG 用来选择RTC 状态标志,参数选择如下: 秒中断标志参数为 RTC_IT_SEC。在秒钟中断产生的时候,读取当前的时间值。在中断函数结束之前我们会清除下对应的中断标志。 清除 RTC 秒中断标志函数如下:
将以上几步全部配置好后,我们就可以正常使用 RTC 中断来更新时间了。 |
ST-LINK Utility介绍、下载、安装和使用教程
兔哥的ST67——【000】ST67模组订购
STM32 GUI LTDC 最大像素时钟评估方法
【2025·STM32峰会】GUI解决方案实训分享1-对LVGL咖啡机例程的牛刀小试以及问题排查
OpenBLT移植到STM32F405开发板
为什么要先开启STM32外设时钟?
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【经验分享】STM32实例-RTC实时时钟实验④-获取RTC时间函数与中断服务函数
STM32 以太网 MAC Loopback 的实现
刘氓兔的64位入门挑战【1】——MP257芯片下单和硬件准备