GD32F305芯片的RTC初始化教程

这篇教程详细介绍了GD32F305芯片的RTC初始化过程,包括搭建library库、使用32.768kHz外挂晶振作为时钟源,以及初始化时需要注意的电源和可写位设置。对于RTC在备份电源区域的操作,需参照规格书确保正确配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意

1. 需要搭建GD32的library库;

2. 采用外挂的hsi作为时钟的输入源晶振,即32.768khz;

3. RTC处于备份电源区域,写其寄存器需要打开其电源,且使能可写位(详情可查看其规格书);

 大致初始化流程如下

void rtc_init(void)
{
    /* reset backup domain */
    bkp_deinit();

    /* enable PMU and BKPI clocks */
    rcu_periph_clock_enable(RCU_BKPI);
    rcu_periph_clock_enable(RCU_PMU);

    /* allow access to BKP domain */
    pmu_backup_write_enable();

    /* enable LXTAL */
    rcu_osci_on(RCU_LXTAL);

    /* disbale bypass mode */
    rcu_osci_bypass_mode_disable(RCU_LXTAL);

    /* wait till LXTAL is ready */
    rcu_osci_stab_wait(RCU_LXTAL);

    /* select RCU_LXTAL as RTC clock source */
    rcu_rtc_clock_config(RCU_RTCSRC_LXTAL);

    /* enable RTC Clock */
    rcu_periph_clock_enable(RCU_RTC);

    /* wait until last write operation on RTC registers has finished */
    rtc_lwoff_wait();

    /* set RTC prescaler: set RTC period to 1s */
    rtc_presc
<think>嗯,用户问的是GD32F305的睡眠模式、深度睡眠模式和待机模式的区别。首先,我需要确认自己对这些低功耗模式的理解是否正确。GD32F305是基于Arm Cortex-M4的微控制器,所以它的低功耗模式应该和Cortex-M系列的其他芯片类似,但可能有一些厂商特定的调整。 用户可能是在开发需要低功耗的应用,比如物联网设备或者电池供电的设备,所以需要了解不同模式下的功耗和唤醒方式的区别。他们可能想选择最合适的模式来平衡功耗和响应速度。 首先,睡眠模式应该是最基本的低功耗模式,通常只关闭CPU时钟,但外设还在运行。这时候,任何中断都可以唤醒系统。然后是深度睡眠,可能关闭更多的时钟,比如外设的时钟,或者降低主时钟频率,这样功耗更低,但唤醒源可能更少。待机模式可能是功耗最低的,关闭大部分电路,只保留必要的唤醒逻辑,比如RTC或者外部引脚,这时候需要特定的唤醒源,比如复位或者外部信号。 接下来要确认GD32F305的具体规格。查阅数据手册,睡眠模式(Sleep)下,CPU停止,但外设如DMA、定时器等仍可运行。唤醒时间应该很快,因为不需要重新初始化外设。深度睡眠模式(Deep Sleep)可能会关闭主时钟,只保留低速时钟,比如内部RC振荡器,外设可能部分关闭,唤醒源可能包括外部中断或特定定时器。待机模式(Standby)可能关闭更多电源域,仅保留备份域,所以需要更长的唤醒时间,且RAM内容可能丢失,需要从复位重新启动。 另外,用户可能关心每个模式的功耗数值,比如典型电流值,这样他们可以估算电池寿命。例如,睡眠模式可能是几mA,深度睡眠是几百μA,待机模式可能是几μA。但具体数值需要根据手册确认,可能会有不同。 还需要注意唤醒后的系统状态。睡眠模式唤醒后,程序从暂停处继续执行;深度睡眠可能需要重新初始化某些外设;待机模式则可能相当于系统复位,程序从头开始执行。 用户可能还想知道如何配置这些模式,是否需要特定的寄存器设置,或者库函数支持。比如,使用HAL库还是直接操作寄存器,进入不同模式的步骤和注意事项。 总结,回答的结构应该分三个模式,分别介绍进入方式、功耗、唤醒源、唤醒时间、系统状态变化,以及适用场景。需要确保信息准确,参考GD32的数据手册,避免错误。同时,用对比表格可能更清晰,帮助用户快速理解差异。</think>GD32F305系列MCU的低功耗模式区分主要基于关闭的模块层级与唤醒机制,以下是三种模式的详细对比: --- ### **1. 睡眠模式 (Sleep Mode)** **核心特征**: - **CPU停止运行**:关闭Cortex-M4内核时钟,但外设(如DMA、定时器、通信接口)仍保持活动 - **功耗水平**:典型值约2-5mA(@主频72MHz) - **唤醒源**: - 任意中断(外部GPIO中断、定时器中断等) - 事件触发(如DMA传输完成) - **唤醒时间**:<5μs(立即恢复执行) - **数据保留**:所有SRAM和寄存器内容保持 - **典型应用**:短时任务间隔(如等待传感器数据) --- ### **2. 深度睡眠模式 (Deep Sleep Mode)** **核心特征**: - **关闭更多模块**: - 主时钟(HCLK, PCLK)停用 - 保留低速时钟(LRC/LXT)用于RTC或独立看门狗 - 部分外设自动断电(需通过`RCU_PCU`寄存器手动配置保留的外设) - **功耗水平**:典型值约50-200μA - **唤醒源**: - 外部中断(EXTI) - RTC闹钟 - 独立看门狗复位(需提前配置) - **唤醒时间**:约10-50μs(需重新初始化时钟树) - **数据保留**: - 核心SRAM可选保留(通过`PMU_CTL`寄存器的`SRAM_PD`位配置) - 备份寄存器(RTC_BKPx)始终保留 - **典型应用**:周期性数据采集(如每小时唤醒一次) --- ### **3. 待机模式 (Standby Mode)** **核心特征**: - **最大程度断电**: - 关闭所有1.2V电源域(包括核心电压) - 仅保留备份域(RTC、备份寄存器、唤醒电路) - **功耗水平**:典型值约1-5μA - **唤醒源**: - NRST引脚复位 - RTC闹钟 - 特定唤醒引脚(WKUPx)上升沿 - 独立看门狗复位(需提前使能) - **唤醒时间**:等同于冷启动(约几十ms) - **数据丢失**: - SRAM和寄存器内容全部丢失 - 程序从复位向量重新执行 - **典型应用**:超低功耗待机(如电池供电设备的长期休眠) --- ### **模式对比表** | 参数 | 睡眠模式 | 深度睡眠模式 | 待机模式 | |--------------------|---------------|----------------|----------------| | **内核状态** | 暂停 | 关闭 | 完全断电 | | **外设可用性** | 部分保持 | 仅保留指定外设 | 全部关闭 | | **SRAM保持** | 全部保持 | 可选部分保持 | 不保持 | | **典型功耗** | ~3mA | ~100μA | ~3μA | | **唤醒延迟** | 微秒级 | 微秒级 | 毫秒级 | | **唤醒后执行位置** | 中断点继续 | 中断点继续 | 复位重启 | --- ### **模式选择建议** - **快速响应需求** → 睡眠模式(如实时控制) - **周期性任务+低功耗** → 深度睡眠(搭配RTC定时唤醒) - **最低静态功耗** → 待机模式(需牺牲状态保持能力) **关键配置步骤**: 1. 进入前关闭非必要外设时钟(`RCU_AHBx`/`RCU_APBx`) 2. 配置唤醒源(EXTI/WKUP引脚需设置滤波) 3. 使用`PMU_CTL`寄存器控制模式切换: ```c pmu_to_sleepmode(); // 进入睡眠 pmu_to_deepsleepmode(); // 进入深度睡眠 pmu_to_standbymode(); // 进入待机 ``` **注意事项**: - 待机模式下GPIO状态默认浮空,建议配置唤醒引脚为内部上拉 - 深度睡眠中若需保留SRAM,需避免访问未保留区域(否则触发HardFault)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值