STM32调用HAL_RTC_GetTime读不出时间

STM32F4单独使用HAL_RTC_GetTime是读不出时间来的。需要在HAL_RTC_GetTime后面使用HAL_RTC_GetDate才行。详情见HAL_RTC_GetTime函数的说明的注意事项。
在这里插入图片描述

### STM32 RTC 中 `HAL_RTC_WaitForSynchro` 函数的作用及使用方法 #### 1. 函数功能描述 `HAL_RTC_WaitForSynchro` 是用于等待 RTC 同步事件完成的一个阻塞函数。此函数的主要目的是确保外部时钟源(通常为 LSE 或 HSE 分频后的信号)已经稳定并同步到 RTC 的内部计数器上[^3]。 当配置 RTC 外部时钟源时,可能需要一定的时间来使时钟信号被正确捕获并与 RTC 计数器保持一致。在此期间,任何对 RTC 时间或日期的操作都可能导致不准确的结果。因此,在执行其他操作之前调用 `HAL_RTC_WaitForSynchro` 可以有效避免此类问题的发生。 #### 2. 使用场景分析 以下是常见的使用场景: - **初始化阶段**:在调用 `HAL_RTC_Init()` 初始化完成后立即调用 `HAL_RTC_WaitForSynchro`,以确保 RTC 已经完全准备好接受进一步指令。 - **时间/日期设置前**:如果计划通过 `HAL_RTC_SetTime` 和 `HAL_RTC_SetDate` 设置新的时间和日期,则建议先调用 `HAL_RTC_WaitForSynchro` 来确认当前状态已同步完毕后再继续后续动作。 - **取数据前提醒**:即使只是单纯地尝试获取现有时间 (`HAL_RTC_GetTime`) 或者日期(`HAL_RTC_GetDate`) ,也最好在此之前加入这个步骤作为额外保障措施之一[^1]。 #### 3. 实现细节解析 下面展示了一个典型的例子如何利用该 API 完成上述目标: ```c // 配置结构体定义部分省略... RTC_HandleTypeDef hrtc; /* Step 1: Initialize the RTC peripheral */ if (HAL_RTC_Init(&hrtc) != HAL_OK){ Error_Handler(); /* Initialization failed, handle error here */ } /* Step 2: Wait until synchronization is complete */ if(HAL_RTC_WaitForSynchro(&hrtc)!= HAL_OK ){ Error_Handler(); /* Synchronization failure handling code goes here */ } /* Now it's safe to proceed with other operations such as setting/getting time and date */ ``` 在这个片段里可以看到我们首先完成了基本的硬件资源分配工作之后紧接着就立刻请求进入同步模式直到成功为止;只有这样才能够保证接下来所有的关于实时日历方面的处理都能基于最新最精确的数据来进行计算或者显示给用户看等等[^4]。 #### 4. 注意事项提醒 尽管这是一个非常有用的工具可以帮助开发者简化开发流程提高程序可靠性但是仍然存在一些需要注意的地方如下所示: - 如果所使用的微控制器并没有连接有效的低速振荡晶体那么即便反复调用本命令也不会有任何效果因为根本就没有可供比较的对象可以用来判断两者之间是否存在偏差情况发生. - 此外由于其本质属于轮询机制所以在某些极端条件下可能会消耗较多CPU周期从而影响整体性能表现特别是一旦遇到异常状况比如电源电压波动较大引起系统复位等情况下的恢复速度也会受到影响. --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值