Comparator
该示例通过使用 RTC 比较器实现定时功能。
当 RTC 定时时间到,会触发 RTC 对应通道的比较器中断。
用户可以通过不同的宏配置改变示例中 RTC 通道设置,定时时间等信息,具体宏配置详见 配置选项。
环境需求
该示例的环境需求,可参考 环境需求。
配置选项
可配置如下宏修改 RTC 预分频值与比较器的值。
#define RTC_PRESCALER_VALUE (3200-1) /*< Set this macro to modify the RTC Prescale value. RTC_CLK = 32k / 3200 = 10Hz. */ #define RTC_COMP_VALUE (10) /*< Set this macro to modify the RTC Comparator value. Time = 10 / RTC_CLK. */
可配置如下宏修改 RTC 通道设置。
#define RTC_COMP_INDEX RTC_COMP1 #define RTC_COMP_INDEX_INT RTC_INT_COMP1
编译和下载
该示例的编译和下载流程,可参考 编译和下载。
测试验证
比较器设定时间(1s)到,触发中断,打印中断信息,每次计数值 +10。
RTC_Handler: RTC_COMP_INDEX1 RTC_Handler: RTC counter current value = 10 RTC_Handler: RTC_COMP_INDEX1 RTC_Handler: RTC counter current value = 20 ...
代码介绍
该章节主要介绍示例中的初始化和相应功能实现的代码和流程说明。
源码路径
工程文件和源码路径如下:
工程路径:
sdk\samples\peripheral\rtc\comparator\proj
源码路径:
sdk\samples\peripheral\rtc\comparator\src
初始化
RTC 初始化的流程如图所示:

RTC 初始化流程
调用
RTC_DeInit()
,复位 RTC 外设。调用
RTC_SetPrescaler()
, 设置 RTC 预分频系数。调用
RTC_INTConfig()
,使能 RTC 比较器通道 1 计数中断,调用RTC_NvCmd()
,使能 RTC 中断功能。NVIC 相关配置可参考 中断配置。调用
RTC_ResetCounter()
复位 RTC 计数器,调用RTC_Cmd()
使能 RTC 外设。void driver_rtc_init(void) { RTC_DeInit(); RTC_SetPrescaler(RTC_PRESCALER_VALUE); RTC_SetCompValue(RTC_COMP_INDEX, RTC_COMP_VALUE); RTC_INTConfig(RTC_COMP_INDEX_INT, ENABLE); /* Config RTC interrupt */ NVIC_InitTypeDef NVIC_InitStruct; NVIC_InitStruct.NVIC_IRQChannel = RTC_IRQn; NVIC_InitStruct.NVIC_IRQChannelPriority = 3; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStruct); RTC_NvCmd(ENABLE); /* Start RTC */ RTC_ResetCounter(); RTC_Cmd(ENABLE); }
功能实现
比较器设定时间(0.1s*10 = 1s)到,触发 RTC 中断,进入中断处理函数
RTC_Handler
。打印中断信息和比较值信息。
重新设置比较值。
清除比较器通道 1 计数中断。
DBG_DIRECT("RTC_Handler: RTC_COMP_INDEX%d", RTC_COMP_INDEX); DBG_DIRECT("RTC_Handler: RTC counter current value = %d", RTC_GetCounter()); RTC_SetCompValue(RTC_COMP_INDEX, RTC_GetCounter() + RTC_COMP_VALUE); RTC_ClearCompINT(RTC_COMP_INDEX);