在货物监控设备研发中,如何对单片机进行实时时钟配置?

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在货物监控设备研发中,如何对单片机进行实时时钟配置?相关的知识,希望对你有一定的参考价值。

近期,笔者在进行货物监控设备的研发。货物监控设备是基于无线传感技术以及最新的定位技术等研发的。可以对运输中的货物进行实时监控,管理者可以在云端后台实时可视化的观看到货物运输的轨迹。
在这里插入图片描述
货物监控设备中的无线传感设备可以监测到货物箱内的温湿度情况,以及光感度。一旦货物在没有被允许的情况下打开货箱,传感器监测到光感的异常变化会立即启动报警系统,保证货物的安全。

在货物监控设备的研发过程中,笔者会根据产品性能的需要对STM32的RTC进行相应配置。RTC是独立的定时器。
在这里插入图片描述
RTC在相应软件配置下,可提供时钟日历的功能。对RTC计数器进行修改,可以重新设置产品的系统时间。相信很多产品研发的小伙伴都会用到RCT的设置,那么具体如何操作呢?

STM32 RTC原理
RTC的核心部分是由一组可以编程的计数器组成的。这个计数器分为两个模块。第一个模块是实时时钟的预分频模块,它可以编程产生出最长时间为1秒的实时时钟时间基TR_CLK。实时时钟的预分频模块中包括一个20位的RTC预分频器。
在这里插入图片描述
如果用户在RTC_CR寄存器中设置了相对应的允许位。那么每一个TR_CLK周期中实时时钟都会产生一个秒中断;RTC的第二个模块是一个32位的可编程计数器,这个计数器可以被初始化为当前的系统时间。这个系统时间会按照TR_CLK周期进行累加,并与存储在RTC_ALR寄存器的可编程时间进行比较。
在这里插入图片描述
如果RTC_CR控制寄存器中已经设置了相对应的允许位,在比较匹配时,将会产生的一个闹钟的中断。

STM32 RTC原理和配置
在这里插入图片描述
RTC的配置过程如下:
(1)查询RTOFF位,直到RTOFF的值变为’1’
(2)置CNF值为1,进入配置模式
(3)对一个或多个RTC寄存器进行写操作
(4)清除CNF标志位,退出配置模式
(5)查询RTOFF,直至RTOFF位变为’1’以确认写操作已经完成。
仅当CNF标志位被清除时,写操作才能进行,这个过程至少需要3个RTCCLK周期
在这里插入图片描述
实例配置过程:
配置:RTC使用内部LSI时钟,使能闹钟中断,设置本地时间为2021-03-30 01:34:30
void RTCInit(void)
{
NVIC_InitTypeDef NVIC_InitStruct;
EXTI_InitTypeDef EXTI_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR|RCC_APB1Periph_BKP,ENABLE);

PWR_BackupAccessCmd(ENABLE);

RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);

RCC_RTCCLKCmd(ENABLE);

//RCT Config

RTC_WaitForLastTask();

RTC_WaitForSynchro();

RTC_ITConfig(RTC_IT_ALR,ENABLE);

RTC_WaitForLastTask();

RTC_WaitForSynchro();

RTC_ClearITPendingBit(RTC_IT_ALR);

RTC_WaitForLastTask();

RTC_EnterConfigMode();

RTC_SetPrescaler(40*1000-1);

RTC_WaitForLastTask();

RTC_Set(2021,3,30,1,34,40); //设置时间

RTC_WaitForLastTask();

RTC_SetAlarm(RTC_GetCounter()+1);

RTC_WaitForLastTask();

RTC_ExitConfigMode();

EXTI_InitStructure.EXTI_Line = EXTI_Line17;

EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;

EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;

EXTI_InitStructure.EXTI_LineCmd = ENABLE;

EXTI_Init(&EXTI_InitStructure);

NVIC_InitStruct.NVIC_IRQChannel = RTCAlarm_IRQn;

NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;

NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 6;

NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;

NVIC_Init(&NVIC_InitStruct);

RTC_ClearITPendingBit(RTC_IT_ALR|RTC_IT_SEC);

EXTI_ClearITPendingBit(EXTI_Line17);

}

以上是关于在货物监控设备研发中,如何对单片机进行实时时钟配置?的主要内容,如果未能解决你的问题,请参考以下文章

在货物监控设备的研发过程中,如何对设备进行电量采集?

在货物监控设备研发的过程中,如何对MT MC MLT进行判定?

在人员监控设备研发中,如何对单片机的通用定时器进行配置?

在货物监控设备的开发使用中,如何进行参数配置?

货物监控设备研发中,睡眠功能的应用

在资产跟踪设备研发中,如何进行固件升级