GD32F4xx---RTC初始化设置及闹钟方式实现秒停止解说

[复制链接]
发表于 2026-1-30 20:49:53 | 显示全部楼层 |阅读模式
GD32F4xx—RTC初始化设置及闹钟方式实现秒停止解说

1、下载链接:源码工程
一、概述

GD32F4x的RTC例程网上资源较少,具体阅读用户手册后做出如下设置。RTC模块提供了一个包罗日期(年/月/日)和时间(时/分/秒/亚秒)的日历功能。除亚秒用二进制码表现外,时间和日期都以BCD码的情势表现。RTC可以举行夏令时赔偿。RTC可以工作在省电模式下,并通过软件设置来智能唤醒。RTC支持外接更高精度的低频时钟,用以到达更高的日历精度。下边就以RTC模块的框图为引线,对RTC的相干功能和利用做相干先容。
二、框图


RTC单元有三个可选的独立时钟源:


  • 外部低速晶体振荡器时钟 LXTAL
  • 内部32K RC振荡器时钟 IRC32K
  • 外部高速晶体振荡器时钟 HXTAL
  • 一样平常选用LXTAL外部32.768K晶振,内部晶振受温漂影响,计时会存在较大的偏差。LXTAL随后颠末一个7位的异步预分频(默认值为127+1)和一个15位的同步预分频(255+1),得到1Hz的时钟频率。
三、RTC初始化和设置

在默认环境下,PMU_CTL寄存器的BKPWEN位被清0。以是写RTC寄存器前必要软件提前设置BKPWEN位。RTC_BKPx寄存器处于VDD备份域中,纵然VDD电源被堵截,该地区的寄存器的电源还可由VBAT提供。从待机模式唤醒或体系复位利用都不会影响这些寄存器。只有当被检测到有侵入变乱和备份域复位时,这些寄存器复位。
  1. /*!
  2.     \brief      main function
  3.     \param[in]  none
  4.     \param[out] none
  5.     \retval     none
  6. */
  7. int main(void)
  8. {
  9.     gd_eval_com_init(EVAL_COM0);
  10.     printf("\n\r  ****************** RTC calendar demo ******************\n\r");
  11.                 /* enable PMU clock */
  12.     rcu_periph_clock_enable(RCU_PMU);
  13.     /* enable the access of the RTC registers */
  14.     pmu_backup_write_enable();
  15.        
  16.     rtc_pre_config();
  17.     /* get RTC clock entry selection */
  18.     RTCSRC_FLAG = GET_BITS(RCU_BDCTL, 8, 9);
  19.     /* check if RTC has aready been configured */
  20.     if((BKP_VALUE != RTC_BKP0) || (0x00 == RTCSRC_FLAG)){
  21.         /* backup data register value is not correct or not yet programmed
  22.         or RTC clock source is not configured (when the first time the program
  23.         is executed or data in RCU_BDCTL is lost due to Vbat feeding) */
  24.         rtc_setup();
  25.     }else{
  26.         /* detect the reset source */
  27.         if (RESET != rcu_flag_get(RCU_FLAG_PORRST)){
  28.             printf("power on reset occurred....\n\r");
  29.         }else if (RESET != rcu_flag_get(RCU_FLAG_EPRST)){
  30.             printf("external reset occurred....\n\r");
  31.         }
  32.         printf("no need to configure RTC....\n\r");
  33.         rtc_show_time();
  34.         rtc_show_alarm();
  35.     }
  36.     rcu_all_reset_flag_clear();
  37.     /* configure the leds */
  38.     gd_eval_led_init(LED1);
  39.     gd_eval_led_on(LED1);
  40.     gd_eval_led_init(LED2);
  41.     gd_eval_led_on(LED2);
  42.     rtc_flag_clear(RTC_FLAG_ALRM0);
  43.     exti_flag_clear(EXTI_17);
  44.     /* RTC alarm interrupt configuration */
  45.     exti_init(EXTI_17,EXTI_INTERRUPT,EXTI_TRIG_RISING);
  46.     nvic_irq_enable(RTC_Alarm_IRQn,0,0);
  47.     while (1);
  48. }
复制代码
四、停止部门

  1. void RTC_Alarm_IRQHandler(void)
  2. {
  3.         if(RESET != rtc_flag_get(RTC_FLAG_ALRM0)){
  4.         rtc_flag_clear(RTC_FLAG_ALRM0);
  5.         exti_flag_clear(EXTI_17);
  6.         gd_eval_led_toggle(LED2);
  7.                                 rtc_show_time();
  8.     }
  9. }
复制代码
五、试验征象


每秒打印时间信息。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表