王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 )

  整个lorawan应用层,所有的时间管理和任务调度都和RTC有关。

  使能了ALARM_A功能,通过设置超时时间,我们可以完成对应的任务序列。

王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 )_第1张图片

 

   宏 N_PREDIV_S 定义了同步预分频的位数,即同步预分频寄存器的重装载值为2^10-1,即得到宏 PREDIV_S。

  为了得到最终 1Hz 的日历更新频率,异步预分频的值为 宏 PREDIV_A ( RTC时钟为32.768KHz )。

  RTC源码中定义了一个时间戳结构体:

王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 )_第2张图片

 

  在需要执行定时任务时,就是会更新这个结构体对象的值,并作为时间参考点。可以看做一个时间戳结构体。

  RtcTimeContext_t 对象由  uint32_t RtcSetTimerContext( void )  函数更新。返回32位的同步异分频计数器的总计数值。

void RtcInit( void );  //初始化RTC日历寄存器并使能RTC。

void RtcSetMcuWakeUpTime( void ); //计算MCU从休眠状态切换到工作状态需要的时间,与McuWakeUpTimeInitialized有关,只需要执行一次
 void RtcSetAlarm( uint32_t timeout ); //初始化RTC时,并没有使能ALARM_A,此时才使能,timeout是超时时间,即多少时间后触发报警
 
void RtcStartAlarm( uint32_t timeout );//启动ALARM_A警报功能,开始计时,经过timeout后触发警报

  在rtc_board.c和.h文件中还有其他一些功能,比如获取时间,计算时间间隔之类的,都是RTC时钟功能的一些扩展。

  就8说了

  对了,还要补充的是低功耗管理,这个是STM32L0系列的招牌。

  在官方源码中大家可以看,分别是lpm_board.c和board.c。

  在 board.c  中定义了每个芯片的低功耗的具体实现方式。

你可能感兴趣的:(王某人从0开始学习lorawan的笔记_3:最底层!RTC( 很重要 ))