本帖最后由 Peixu 于 2023-11-30 11:30 编辑
使用APM32F411实现RTC时钟输出的步骤详解介绍
在APM32F411中控制器中内置 1 个了 RTC模块,通过RTC结构框图可以看到时钟输入源引脚分别可以选择: LSECLK 信号输入引脚(OSC32_IN、OSC32_OUT)、HSECLK 信号输入引脚(OSC_IN、OSC_OUT)、LSICLK低速内部时钟输入。并且拥有一个1 个 TAMP 输入信号检测引脚(RTC_TAMP1);默认由 VDD供电,当 VDD断电时,可自动切换至 VBAT供电,RTC 配置及时间数据不丢失;产生系统复位、软件复位、电源复位时,RTC 配置及时间数据不丢失;支持闹钟、日历功能。
RTC_OUT 可以由以下两种的其中一种形式输出:
- RTC_CALIB:通过 RTC_CTRL 寄存器的 CALOEN 位开启此输出,当 LSECLK 的频率是32.768kHz 时,时钟输出为 512Hz 或者 1Hz。
- RTC_ALARM:通过 RTC_CTRL 寄存器的 OUTSEL 位开启此输出,闹钟 A。
接下来介绍如何使用RTC_OUT PIN 输出时钟为 512Hz 或者 1Hz的实验,这样我们就能直观的看出RTC时钟误差。
RTC时钟输出校准的重要性:
实时时钟(RTC)在许多嵌入式系统中扮演着至关重要的角色,用于提供准确的时间信息。RTC的时钟输出的准确性对于时间相关的应用非常重要,例如数据记录、定时任务以及时间敏感型应用。然而,所有的时钟都存在一定程度的漂移,这可能会导致时钟输出与实际时间存在微小差异。因此,RTC时钟输出的校准至关重要,以确保时间的精确性。
RTC时钟输出校准的原因:
RTC时钟输出的不准确性可能源自多个因素。硬件方面可能存在晶体振荡器的频率误差或环境温度变化,软件方面可能存在时钟计数器的漂移。这些因素都可能导致RTC时钟输出的不准确性。因此,校准RTC时钟输出是为了纠正这些误差并使其保持与实际时间的一致性。
使用RTC_LSE的外部低速时钟32.768KHz时钟配置:
Struct.AsynchPrediv = 0X7F(十进制127);
Struct.SynchPrediv = 0XFF(十进制255);
时钟 = LSE/[(255+1)*(127+1)] = 1HZ
void RTC_LSE_Init(void)
{
......
使用40Khz的LSI内部低速时钟的话设置为:
Struct.AsynchPrediv = 0X63(十进制99);
Struct.SynchPrediv = 0X18F(十进制399);
40 000 = 400 * 100 ;
void RTC_LSI_Init(void)
{
......
RTC_ConfigStructInit(&Struct);
Struct.AsynchPrediv = 0X63;
Struct.SynchPrediv = 0X18F;
RTC_Config(&Struct);
}
配置完成RTC时钟源后,重点加入以下2行代码。
RTC_ConfigCalibOutput(RTC_CALIBOUTPUT_1Hz);
RTC_EnableCalibOutput();
RTC_ConfigCalibOutput(RTC_CALIBOUTPUT_512Hz);
RTC_EnableCalibOutput();
|