GD32F470入门教程(十一)RTC

13k 词

RTC

简介

RTC模块提供了一个包含日期(年/月/日)和时间(时/分/秒/亚秒)的日历功能。除亚秒用二进制码显示外,时间和日期都以BCD码的形式显示。RTC可以进行夏令时补偿。RTC可以工作在省电模式下,并通过软件配置来智能唤醒。RTC支持外接更高精度的低频时钟,用以达到更高的日历精度。

主要特性

image-20260228111711381

常用库函数

GD32F470 的 RTC 库提供了一系列函数用于配置和控制 RTC 模块。以下是一些常用的功能和函数:

1. 备份域访问控制

在配置 RTC 之前,必须先使能电源时钟(PMU)并允许对备份域进行写访问。这是因为 RTC 位于备份域中。

1
2
3
4
/* 使能电源时钟 */
rcu_periph_clock_enable(RCU_PMU);
/* 允许访问备份域 */
pmu_backup_write_enable();

2. 时钟源配置

RTC 可以使用 LSE(外部低速时钟)、LSI(内部低速时钟)或 HSE(外部高速时钟)的分频作为时钟源。通常为了精度和低功耗,推荐使用 LSE(32.768kHz)。

1
2
3
4
5
6
7
8
/* 使能 LSE */
rcu_osci_on(RCU_LSE);
/* 等待 LSE 稳定 */
rcu_osci_stab_wait(RCU_LSE);
/* 选择 LSE 作为 RTC 时钟源 */
rcu_rtc_clock_config(RCU_RTCSRC_LSE);
/* 使能 RTC 时钟 */
rcu_periph_clock_enable(RCU_RTC);

3. RTC 初始化

RTC 需要配置预分频器以生成 1Hz 的时钟用于日历更新。通常 LSE 为 32.768kHz,设置异步预分频器为 127 (0x7F),同步预分频器为 255 (0xFF)。
计算公式:$f_{ck_spre} = \frac{f_{rtc_clk}}{(PREDIV_A + 1) \times (PREDIV_S + 1)}$

1
2
3
4
5
6
7
8
9
10
11
rtc_parameter_struct rtc_initpara;

/* 等待 RTC 寄存器同步 */
rtc_register_sync_wait();

/* 配置 RTC 预分频器 */
rtc_initpara.rtc_factor_asyn = 0x7F;
rtc_initpara.rtc_factor_syn = 0xFF;
rtc_initpara.rtc_year = 0x16; // 年份后两位
rtc_initpara.rtc_display_format = RTC_24HOUR;
rtc_init(&rtc_initpara);

4. 时间与日期设置

使用 rtc_current_time_get()rtc_current_date_get() 获取时间,使用 rtc_time_config()rtc_date_config() 设置时间。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
rtc_parameter_struct rtc_initpara;

/* 配置时间 */
rtc_initpara.rtc_am_pm = RTC_AM;
rtc_initpara.rtc_hour = 0x12; // BCD 格式
rtc_initpara.rtc_minute = 0x00;
rtc_initpara.rtc_second = 0x00;
rtc_time_config(&rtc_initpara);

/* 配置日期 */
rtc_initpara.rtc_year = 0x26; // 2026年
rtc_initpara.rtc_month = RTC_FEB;
rtc_initpara.rtc_date = 0x28;
rtc_initpara.rtc_day_of_week = RTC_SATURDAY;
rtc_date_config(&rtc_initpara);

5. 闹钟设置

RTC 支持两个闹钟(Alarm 0 和 Alarm 1),可以配置在特定的时间触发中断。

1
2
3
4
5
6
7
8
9
10
11
rtc_alarm_struct rtc_alarm;

/* 配置闹钟时间 */
rtc_alarm.rtc_alarm_mask = RTC_ALARM_DATE_MASK | RTC_ALARM_HOUR_MASK | RTC_ALARM_MINUTE_MASK; // 仅屏蔽未设置的位,这里示例仅关注秒
rtc_alarm.rtc_alarm_second = 0x30; // 在30秒时触发
rtc_alarm_config(RTC_ALARM0, &rtc_alarm);

/* 使能闹钟 */
rtc_alarm_enable(RTC_ALARM0);
/* 使能闹钟中断 */
rtc_interrupt_enable(RTC_INT_ALARM0);

完整代码示例

下面是一个完整的 RTC 初始化及时间显示的代码示例。

头文件包含

1
2
#include "gd32f4xx.h"
#include <stdio.h>

RTC 配置函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
* @brief 配置 RTC
* @param None
* @retval None
*/
void rtc_configuration(void)
{
/* 1. 使能 PMU 时钟 */
rcu_periph_clock_enable(RCU_PMU);
/* 2. 允许访问备份域 */
pmu_backup_write_enable();

/* 3. 复位备份域(如果需要完全重置) */
/* rcu_backup_reset_enable(); */
/* rcu_backup_reset_disable(); */

/* 4. 使能 LSE */
rcu_osci_on(RCU_LSE);
/* 5. 等待 LSE 稳定 */
rcu_osci_stab_wait(RCU_LSE);

/* 6. 选择 RTC 时钟源 */
rcu_rtc_clock_config(RCU_RTCSRC_LSE);
/* 7. 使能 RTC 时钟 */
rcu_periph_clock_enable(RCU_RTC);

/* 8. 等待寄存器同步 */
rtc_register_sync_wait();

/* 9. 获取当前 RTC 预分频值,如果已经配置过且无需修改,可以跳过初始化 */
/* 这里为了演示,每次都进行初始化 */
rtc_parameter_struct rtc_initpara;

/* 预分频器配置:LSE = 32.768KHz */
/* 异步预分频 = 127,同步预分频 = 255 */
/* clk = 32768 / (127+1) / (255+1) = 1Hz */
rtc_initpara.rtc_factor_asyn = 0x7F;
rtc_initpara.rtc_factor_syn = 0xFF;
rtc_initpara.rtc_year = 0x26;
rtc_initpara.rtc_display_format = RTC_24HOUR;

/* 初始化 RTC */
if(ERROR == rtc_init(&rtc_initpara)){
printf("RTC init failed!\n");
}
}

时间设置与获取函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/**
* @brief 设置当前时间
* @param h: 小时, m: 分钟, s: 秒
* @retval None
*/
void rtc_set_time(uint8_t h, uint8_t m, uint8_t s)
{
rtc_parameter_struct rtc_time_struct;

rtc_time_struct.rtc_am_pm = RTC_AM; // 24小时制下忽略
rtc_time_struct.rtc_hour = h;
rtc_time_struct.rtc_minute = m;
rtc_time_struct.rtc_second = s;

/* 注意:库函数入参通常需要 BCD 格式,如果库内部未转换,需手动转换 */
/* 这里假设传入已经是 BCD 或者是直接数值(GD32库函数通常直接使用数值,内部寄存器是BCD,具体需参考当前使用的库版本行为,标准库通常输入为BCD或十六进制表示的十进制数) */
/* 实际上 GD32F4xx 标准库中,rtc_initpara 结构体成员通常直接赋值(例如 0x12 表示 12点),
如果传入的是十进制变量,需要转换为 BCD 码,例如:((h / 10) << 4) | (h % 10) */

rtc_time_config(&rtc_time_struct);
}

/**
* @brief 显示当前时间
* @param None
* @retval None
*/
void rtc_show_time(void)
{
uint32_t time_sub;
uint8_t hh, mm, ss;

rtc_current_time_get(&rtc_initpara); // 复用上面的结构体或新建

/* 获取时间值 (BCD格式) */
hh = rtc_initpara.rtc_hour;
mm = rtc_initpara.rtc_minute;
ss = rtc_initpara.rtc_second;

/* 打印时间 */
printf("Time: %02x:%02x:%02x\r\n", hh, mm, ss);
}

主函数调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(void)
{
/* 系统初始化... */
systick_config();
usart_config(); // 初始化串口用于打印

printf("RTC Demo Start\r\n");

/* RTC 配置 */
rtc_configuration();

/* 设置初始时间为 12:00:00 */
/* 注意:这里直接传入16进制数模拟BCD码,0x12即为12 */
rtc_set_time(0x12, 0x00, 0x00);

while(1)
{
/* 每秒打印一次时间 */
rtc_show_time();
delay_1ms(1000);
}
}

注意事项

  1. 备份域复位:如果系统断电后 Vbat(电池)供电,RTC 数据会保持。如果代码中包含了 rcu_backup_reset_enable(),则每次复位都会清除 RTC 数据,实际应用中通过检查备份寄存器(RTC_BKPx)来判断是否需要重新配置。
  2. BCD 码:RTC 寄存器主要使用 BCD 码格式,读写时需要注意数据格式转换。
  3. 时钟精度:LSE 的精度较高,LSI 精度较低且随温度变化大。如果对时间精度要求高,必须使用外部 LSE 晶振。

RTC库函数

库函数名称 库函数描述
rtc_deinit 复位 RTC 大部分寄存器
rtc_init 初始化 RTC 寄存器
rtc_init_mode_enter 进入 RTC 配置模式
rtc_init_mode_exit 退出 RTC 配置模式
rtc_register_sync_wait 等待 RTC 寄存器 (RTC_TIME、RTC_DATE) 与 RTC 的 APB 时钟同步并且影子寄存器更新
rtc_current_time_get 获取当前日期和时间
rtc_subsecond_get 获取当前亚秒值
rtc_alarm_config 配置 RTC 闹钟
rtc_alarm_subsecond_config 配置 RTC 闹钟亚秒
rtc_alarm_get 获取 RTC 闹钟
rtc_alarm_subsecond_get 获取 RTC 闹钟亚秒
rtc_alarm_enable 使能 RTC 闹钟
rtc_alarm_disable 失能 RTC 闹钟
rtc_timestamp_enable 使能 RTC 时间戳
rtc_timestamp_disable 失能 RTC 时间戳
rtc_timestamp_get 获取 RTC 时间戳时间和日期
rtc_timestamp_subsecond_get 获取 RTC 时间戳亚秒
rtc_timestamp_pin_map RTC 时间戳输入映射选择
rtc_tamper_enable 使能侵入检测
rtc_tamper_disable 失能侵入检测
rtc_tamper0_pin_map tamper0 输入映射选择
rtc_interrupt_enable 使能 RTC 中断
rtc_interrupt_disable 失能 RTC 中断
rtc_flag_get 获取 RTC 标志位
rtc_flag_clear 清除 RTC 标志位
rtc_alarm_output_config 配置 RTC 闹钟输出
rtc_calibration_output_config 配置 RTC 校准输出选择
rtc_hour_adjust 通过在当前时间上增加或者减少一个小时来适应夏令时和冬令时
rtc_second_adjust 调整 RTC 当前时间的秒或亚秒值
rtc_bypass_shadow_enable 使能 RTC 影子寄存器
rtc_bypass_shadow_disable 失能 RTC 影子寄存器
rtc_refclock_detection_enable 使能 RTC 参考时钟检测功能
rtc_refclock_detection_disable 失能 RTC 参考时钟检测功能
rtc_wakeup_enable 使能 RTC 自动唤醒功能
rtc_wakeup_disable 失能 RTC 自动唤醒功能
rtc_wakeup_clock_set 设置 RTC 自动唤醒定时器时钟
rtc_wakeup_timer_set 设置自动唤醒定时器值
rtc_wakeup_timer_get 获取自动唤醒定时器值
rtc_smooth_calibration_config 配置 RTC 平滑校准
rtc_coarse_calibration_enable 使能 RTC 粗校准
rtc_coarse_calibration_disable 失能 RTC 粗校准
rtc_coarse_calibration_config 配置 RTC 粗校准

函数 rtc_alarm_disable

  • 函数名称rtc_alarm_disable
  • 函数原型ErrStatus rtc_alarm_disable(uint32_t rtc_alarm);
  • 功能描述:失能RTC闹钟。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • rtc_alarm:闹钟选择
      • RTC_ALARM0:闹钟0
      • RTC_ALARM1:闹钟1
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_timestamp_enable

  • 函数名称rtc_timestamp_enable
  • 函数原型void rtc_timestamp_enable(uint32_t edge);
  • 功能描述:使能RTC时间戳。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • edge:选定唤醒边沿触发时间戳检测
      • RTC_EDGE_W_TV:上升沿是时间戳事件有效检测沿
      • RTC_EDGE_FALLING:下降沿是时间戳事件有效检测沿
      • RTC_EDGE_RISING:上升沿是时间戳事件有效检测沿
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_timestamp_disable

  • 函数名称rtc_timestamp_disable
  • 函数原型void rtc_timestamp_disable(void);
  • 功能描述:失能RTC时间戳。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_timestamp_get

  • 函数名称rtc_timestamp_get
  • 函数原型void rtc_timestamp_get(rtc_timestamp_struct* rtc_timestamp);
  • 功能描述:获取RTC时间戳时间和日期。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:
    • rtc_timestamp:时间戳结构体,输出结构体参考表 3-626. 结构体 rtc_timestamp_struct
  • 返回值:无

函数 rtc_timestamp_subsecond_get

  • 函数名称rtc_timestamp_subsecond_get
  • 函数原型uint32_t rtc_timestamp_subsecond_get(void);
  • 功能描述:获取RTC时间戳亚秒值。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:RTC时间戳亚秒值(uint32_t 类型)

函数 rtc_timestamp_pin_map

  • 函数名称rtc_timestamp_pin_map
  • 函数原型void rtc_timestamp_pin_map(uint32_t source);
  • 功能描述:时间戳输入映射选择。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • source:输入映射选择
      • RTC_AF0_TIMESTAMP:时间戳输入映射到RTC_AF0
      • RTC_AF1_TIMESTAMP:时间戳输入映射到RTC_AF1
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_tamper_enable

  • 函数名称rtc_tamper_enable
  • 函数原型void rtc_tamper_enable(rtc_tamper_struct* rtc_tamper);
  • 功能描述:使能RTC侵入检测。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • rtc_tamper:侵入检测结构体,输出结构体参考表 3-627. 结构体 rtc_tamper_struct
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_tamper_disable

  • 函数名称rtc_tamper_disable
  • 函数原型void rtc_tamper_disable(uint32_t source);
  • 功能描述:失能RTC侵入检测。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • source:选定失能的侵入检测来源
      • RTC_TAMPER0:RTC tamper0
      • RTC_TAMPER1:RTC tamper1
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_tamper0_pin_map

  • 函数名称rtc_tamper0_pin_map
  • 函数原型void rtc_tamper0_pin_map(uint32_t source);
  • 功能描述:tamper0输入映射选择。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • source:输入映射选择
      • RTC_AF0_TAMP0:Tamper0输入映射到RTC_AF0
      • RTC_AF1_TAMP0:Tamper0输入映射到RTC_AF1
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_interrupt_enable

  • 函数名称rtc_interrupt_enable
  • 函数原型void rtc_interrupt_enable(uint32_t interrupt);
  • 功能描述:使能RTC指定的中断源。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • interrupt:被使能的RTC中断源
      • RTC_INT_TIMESTAMP:时间戳中断
      • RTC_INT_ALARM0:闹钟0中断
      • RTC_INT_ALARM1:闹钟1中断
      • RTC_INT_TAMPER:侵入检测中断
      • RTC_INT_WAKEUP:定时中断
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_interrupt_disable

  • 函数名称rtc_interrupt_disable
  • 函数原型void rtc_interrupt_disable(uint32_t interrupt);
  • 功能描述:失能RTC指定的中断源。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • interrupt:被失能的RTC中断源
      • RTC_INT_TIMESTAMP:时间戳中断
      • RTC_INT_ALARM0:闹钟0中断
      • RTC_INT_ALARM1:闹钟1中断
      • RTC_INT_TAMPER:侵入检测中断
      • RTC_INT_WAKEUP:定时中断
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_flag_get

  • 函数名称rtc_flag_get
  • 函数原型FlagStatus rtc_flag_get(uint32_t flag);
  • 功能描述:获取RTC指定中断标志位。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • flag:指定的中断标志位
      • RTC_FLAG_ALARM0:闹钟0事件标志
      • RTC_FLAG_ALARM1:闹钟1事件标志
      • RTC_FLAG_TP1:tamper1事件标志
      • RTC_FLAG_TSOV:时间戳事件标志
      • RTC_FLAG_ISOV:时间戳溢出事件标志
      • RTC_FLAG_WUTWF:唤醒配置写入标志
      • RTC_FLAG_ALRM0WF:闹钟0配置写入标志
      • RTC_FLAG_ALRM1WF:闹钟1配置写入标志
      • RTC_FLAG_TP2:tamper2事件标志
  • **输出参数 (out)**:无
  • 返回值SETRESET

函数 rtc_flag_clear

  • 函数名称rtc_flag_clear
  • 函数原型void rtc_flag_clear(uint32_t flag);
  • 功能描述:清除指定中断标志位。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • flag:指定的中断标志位
      • RTC_FLAG_ALARM0:闹钟0事件标志
      • RTC_FLAG_ALARM1:闹钟1事件标志
      • RTC_FLAG_TP1:tamper1事件标志
      • RTC_FLAG_TSOV:时间戳事件标志
      • RTC_FLAG_ISOV:时间戳溢出事件标志
      • RTC_FLAG_WUTWF:唤醒配置写入标志
      • RTC_FLAG_ALRM0WF:闹钟0配置写入标志
      • RTC_FLAG_ALRM1WF:闹钟1配置写入标志
      • RTC_FLAG_TP2:tamper2事件标志
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_alarm_output_config

  • 函数名称rtc_alarm_output_config
  • 函数原型void rtc_alarm_output_config(uint32_t rtc_alarm_output, uint32_t mode);
  • 功能描述:配置RTC闹钟输出。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • rtc_alarm_output:闹钟输出选择
      • RTC_ALARM0_HIGH:设置闹钟0标志位置位,输出引脚为高电平
      • RTC_ALARM1_HIGH:设置闹钟1标志位置位,输出引脚为高电平
      • RTC_WAKEUP_HIGH:设置唤醒标志位置位,输出引脚为高电平
    • mode:闹钟输出模式
      • RTC_ALARM_OPEN_DRAIN:开漏模式
      • RTC_ALARM_PUSH_PULL:推挽模式
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_calibration_output_config

  • 函数名称rtc_calibration_output_config
  • 函数原型void rtc_calibration_output_config(uint32_t rtc_calib_output);
  • 功能描述:配置RTC校准输出选择。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • rtc_calib_output:校准输出选择
      • RTC_CALIB_OUTPUT_512HZ:输出512Hz的校准信号
      • RTC_CALIB_OUTPUT_1HZ:输出1Hz的校准信号
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_hour_adjust

  • 函数名称rtc_hour_adjust
  • 函数原型ErrStatus rtc_hour_adjust(uint32_t operation);
  • 功能描述:通过在当前时间上增加或者减少一个小时来适应夏令时和冬令时。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • operation:增加/调整操作
      • RTC_CTL_ADD1H:增加一个小时
      • RTC_CTL_SUB1H:减少一个小时
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_second_adjust

  • 函数名称rtc_second_adjust
  • 函数原型ErrStatus rtc_second_adjust(uint32_t add_sub, uint32_t minus);
  • 功能描述:调整RTC当前时间的秒或亚秒值。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • add_sub:在当前时间上增加IS或者不增加IS
      • RTC_SHIFT_ADD1S_SET:在当前时间上增加1秒
      • RTC_SHIFT_ADD1S_RESET:在当前时间上不增加1秒
    • minus:在当前时间上减少亚秒值(0x00~0x7F)
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_bypass_shadow_enable

  • 函数名称rtc_bypass_shadow_enable
  • 函数原型void rtc_bypass_shadow_enable(void);
  • 功能描述:使能RTC影子寄存器。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_bypass_shadow_disable

  • 函数名称rtc_bypass_shadow_disable
  • 函数原型void rtc_bypass_shadow_disable(void);
  • 功能描述:失能RTC影子寄存器。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_refclock_detection_enable

  • 函数名称rtc_refclock_detection_enable
  • 函数原型ErrStatus rtc_refclock_detection_enable(void);
  • 功能描述:使能RTC参考时钟检测功能。
  • 先决条件rtc_init_mode_enter/rtc_init_mode_exit
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_refclock_detection_disable

  • 函数名称rtc_refclock_detection_disable
  • 函数原型ErrStatus rtc_refclock_detection_disable(void);
  • 功能描述:失能RTC参考时钟检测功能。
  • 先决条件rtc_init_mode_enter/rtc_init_mode_exit
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_wakeup_enable

  • 函数名称rtc_wakeup_enable
  • 函数原型void rtc_wakeup_enable(void);
  • 功能描述:使能RTC自动唤醒功能。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:无

函数 rtc_wakeup_disable

  • 函数名称rtc_wakeup_disable
  • 函数原型ErrStatus rtc_wakeup_disable(void);
  • 功能描述:失能RTC自动唤醒功能。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_wakeup_clock_set

  • 函数名称rtc_wakeup_clock_set
  • 函数原型ErrStatus rtc_wakeup_clock_set(uint32_t wakeup_clock);
  • 功能描述:设置RTC自动唤醒定时器时钟。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • wakeup_clock:时钟选择
      • WAKEUP_CK_DIV16:RTC时钟/16分频
      • WAKEUP_RTCCK_DIV8:RTC时钟/8分频
      • WAKEUP_RTCCK_DIV4:RTC时钟/4分频
      • WAKEUP_RTCCK_DIV2:RTC时钟/2分频
      • WAKEUP_CK_SPRE:ck_spre(默认1Hz)时钟
      • WAKEUP_CKSPRE_2:ck_spre(默认1Hz)时钟,并且唤醒计数器值增加2¹⁶
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_wakeup_timer_set

  • 函数名称rtc_wakeup_timer_set
  • 函数原型ErrStatus rtc_wakeup_timer_set(uint32_t wakeup_timer);
  • 功能描述:设置RTC自动唤醒定时器值。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • wakeup_timer:唤醒定时器值(0x00~0xFFFF)
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_wakeup_timer_get

  • 函数名称rtc_wakeup_timer_get
  • 函数原型uint16_t rtc_wakeup_timer_get(void);
  • 功能描述:获取自动唤醒定时器值。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值:唤醒定时器值(uint16_t 类型,0x00~0xFFFF)

函数 rtc_smooth_calibration_config

  • 函数名称rtc_smooth_calibration_config
  • 函数原型ErrStatus rtc_smooth_calibration_config(uint32_t calib_window, uint32_t calib_direction, uint32_t calib_value);
  • 功能描述:配置RTC平滑校准。
  • 先决条件:无
  • 被调用函数:无
  • **输入参数 (in)**:
    • calib_window:校准窗口选择
      • RTC_CALIB_WIN_32S:采用32秒校准周期
      • RTC_CALIB_WIN_16S:采用16秒校准周期
      • RTC_CALIB_WIN_8S:采用8秒校准周期
      • RTC_CALIB_WIN_4S:采用4秒校准周期
    • calib_direction:校准方向
      • RTC_CALIB_DIRECTION_UP:增加RTC时钟频率
      • RTC_CALIB_DIRECTION_DOWN:减少RTC时钟频率
    • calib_value:校准值(0~127)
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_coarse_calibration_enable

  • 函数名称rtc_coarse_calibration_enable
  • 函数原型ErrStatus rtc_coarse_calibration_enable(void);
  • 功能描述:使能RTC粗校准。
  • 先决条件rtc_init_mode_enter/rtc_init_mode_exit
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_coarse_calibration_disable

  • 函数名称rtc_coarse_calibration_disable
  • 函数原型ErrStatus rtc_coarse_calibration_disable(void);
  • 功能描述:失能RTC粗校准。
  • 先决条件rtc_init_mode_enter/rtc_init_mode_exit
  • 被调用函数:无
  • **输入参数 (in)**:无
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS

函数 rtc_coarse_calibration_config

  • 函数名称rtc_coarse_calibration_config
  • 函数原型ErrStatus rtc_coarse_calibration_config(uint32_t calib_direction, uint32_t calib_value);
  • 功能描述:配置RTC粗校准。
  • 先决条件rtc_init_mode_enter/rtc_init_mode_exit
  • 被调用函数:无
  • **输入参数 (in)**:
    • calib_direction:校准方向
      • RTC_CALIB_DIRECTION_UP:增加RTC时钟频率
      • RTC_CALIB_DIRECTION_DOWN:减少RTC时钟频率
    • calib_value:校准值(0~31)
  • **输出参数 (out)**:无
  • 返回值ERRORSUCCESS
留言