• CMT2380F32模块开发11-RTC例程


    实时时钟/日历提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过 AM/PM 寄存器位,决定采用 24 或 12 小时格式。

    实时时钟的时钟源可配置为外部低速晶振,外部高速晶振,内部低速 RC;默认使用外部低速晶振。

    具有闹钟功能,具有高精度 1Hz 方波信号输出,具有周期中断,具有闹钟中断。

    所有软件写入和读取的日期时间值都为 BCD 码,无须十六进制转换为十进制。任何无效的日期时间将无法写入,比如 32 日,25 时,70 秒,B 月等。

    RTC 在上电之后复位一次,在系统不掉电的情况下,外部各种复位请求都不能复位 RTC,RTC 会一直处于计数状态。在上电之后,设定日历初始值、闹钟设置、误差补偿、中断等之后,启动 RTC。

    注意,开发板没有外部晶振,所以这里的例程都会使用内部低速晶振,这样可以保证低功耗仍然运行。

    rtc_int例程

    本样例主要低功耗时钟模块周期中断实例。

    1. Clk_SetRCLFreq(ClkFreq32768);
    2. Clk_Enable(ClkRCL, TRUE); //开启内部晶振32
    3. Clk_SetPeripheralGate(ClkPeripheralRtc, TRUE); //使能rtc时钟
    4. stcRtcConfig.enClkSel = RtcClk32; // RtcClkHxt1024;//RtcClk32;//
    5. stcRtcConfig.enAmpmSel = Rtc24h; // Rtc12h;//
    6. stcCycSel.enCyc_sel = RtcPrads;
    7. stcCycSel.enPrds_sel = Rtc_1S;
    8. stcRtcConfig.pstcCycSel = &stcCycSel;
    9. #if 1
    10. Rtc_DisableFunc(RtcCount);
    11. stcAlarm.u8Minute = 0x59;
    12. stcAlarm.u8Hour = 0x12;
    13. stcAlarm.u8Week = 0x08;
    14. Rtc_DisableFunc(RtcAlarmEn);
    15. Rtc_EnAlarmIrq(Rtc_AlarmInt_Enable);
    16. Rtc_SetAlarmTime(&stcAlarm);
    17. Rtc_EnableFunc(RtcAlarmEn);
    18. #endif
    19. stcTime.u8Year = 0x17;
    20. stcTime.u8Month = 0x06;
    21. stcTime.u8Day = 0x07;
    22. stcTime.u8Hour = 0x12;
    23. stcTime.u8Minute = 0x58;
    24. stcTime.u8Second = 0x55;
    25. stcTime.u8DayOfWeek = Rtc_CalWeek(&stcTime.u8Day);
    26. stcRtcConfig.pstcTimeDate = &stcTime;
    27. stcIrqCb.pfnAlarmIrqCb = RtcAlarmCb;
    28. stcIrqCb.pfnTimerIrqCb = RtcCycCb;
    29. stcRtcConfig.pstcIrqCb = &stcIrqCb;
    30. stcRtcConfig.bTouchNvic = TRUE;
    31. Rtc_DisableFunc(RtcCount);
    32. Rtc_Init(&stcRtcConfig);
    33. Rtc_EnableFunc(RtcCount);
    34. while (1 == Gpio_GetIO(0, 2))
    35. ; //注意:此处用户不能屏蔽,否则进入深度休眠模式导致SWD连接不上。
    36. Gpio_SetIO(2, 3, 0);
    37. Lpm_Config(&stcLpmCfg);
    38. Lpm_GotoLpmMode();
    39. Gpio_SetIO(2, 3, 1);

    配置1s周期中断,按下按键1,进入低功耗,启动计数,观察LED1是否1s高低电平变化。

    rtc_cnt例程

    本样例主要涉及RTC模块计数寄存器的写入和读取。

    1. Clk_SetRCLFreq(ClkFreq32768);
    2. Clk_Enable(ClkRCL, TRUE); //开启内部晶振32
    3. Clk_SetPeripheralGate(ClkPeripheralRtc, TRUE); //使能rtc时钟
    4. stcRtcConfig.enClkSel = RtcClk32; // RtcClkHxt1024;//RtcClk32;//
    5. stcRtcConfig.enAmpmSel = Rtc24h; // Rtc12h;//
    6. stcTime.u8Year = 0x17;
    7. stcTime.u8Month = 0x06;
    8. stcTime.u8Day = 0x07;
    9. stcTime.u8Hour = 0x12;
    10. stcTime.u8Minute = 0x59;
    11. stcTime.u8Second = 0x59;
    12. stcTime.u8DayOfWeek = Rtc_CalWeek(&stcTime.u8Day);
    13. stcRtcConfig.pstcTimeDate = &stcTime;
    14. stcIrqCb.pfnAlarmIrqCb = RtcAlarmCb;
    15. stcIrqCb.pfnTimerIrqCb = RtcCycCb;
    16. stcRtcConfig.pstcIrqCb = &stcIrqCb;
    17. stcRtcConfig.bTouchNvic = TRUE;
    18. Rtc_DisableFunc(RtcCount);
    19. Rtc_Init(&stcRtcConfig);
    20. Rtc_EnableFunc(RtcCount);
    21. while (1) {
    22. Rtc_ReadDateTime(&stcReadTime);
    23. }

    运行几秒暂停一下,查看变量stcReadTime。

    rtc_cali例程

    这个例程是时钟补偿的方法,因为我没有去具体校准,而且每个板子校准的值都是不一样的。这个例程需要的时候自行阅读吧。

  • 相关阅读:
    rocky(centos) 安装redis,并设置开机自启动
    计算机毕业设计Java-ssm藏宝阁游戏交易系统源码+系统+数据库+lw文档
    《柳叶刀》发文,孩子睡觉时间一定要睡够9小时!认知能力很重要
    深度学习 --- stanford cs231 编程作业(assignment1,Q2: SVM分类器)
    【sass】 中使用 /deep/ 修改 elementUI 组件样式报错
    【数据恢复篇】浅谈FTK Imager数据恢复功能
    用户行为分析-阿里日志服务
    高斯分解LU矩阵之MATLAB实现
    基于SSM框架流浪猫救援网站的设计与实现 毕业设计-附源码201502
    mescroll 在uni-app 运行的下拉刷新和上拉加载的组件
  • 原文地址:https://blog.csdn.net/andylauren/article/details/126261919