【一】RTC初始化函数,用宏定义设置内部/外部晶振,使用主频晶振8MHz,外部RTC晶振32.768KHz。

/****************************************************************************/
/*Function Name        : RTC Config                                                          */
/*Author                 : Paul                                                              */
/*Data                : 2021-1-20 09:56:59                                                  */
/*Timer                : none                                                              */
/*Input Parameters    : none.                                                              */
/*Return type            : none                                                              */
/*Output Parameters    : none                                                                */
/****************************************************************************/
#define RTC_CLOCK_SOURCE_LSE        // 32.768KHz
//#define RTC_CLOCK_SOURCE_LSI        // 40KHz
//#define RTC_CLOCK_SOURCE_HSE        // 8MHz/32=250KHzvoid RTC_Config(void)
{RTC_InitTypeDef   RTC_InitStructure;u32 timerOut;RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);        /* Enable the PWR clock */PWR_BackupAccessCmd(ENABLE);                            /* Allow access to RTC */if(RTC_ReadBackupRegister(RTC_BKP_DR0)!=0xA5A5)RTC_Set_DateTime(21,RTC_Month_January,RTC_Weekday_Friday,1,9,0,0);    // 2021.1.1  09:00:00#if defined (RTC_CLOCK_SOURCE_LSI)RCC_LSICmd(ENABLE);while(RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET)        /* Wait till LSI is ready */  {}
#elif defined (RTC_CLOCK_SOURCE_LSE)RCC_LSEConfig(RCC_LSE_ON);timerOut=0;while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET)        /* Wait till LSI is ready */  {timerOut++;if(timerOut>0xf000)break;}
#endif#if defined (RTC_CLOCK_SOURCE_LSI)                            /* Select the RTC Clock Source */RCC_RTCCLKConfig(RCC_RTCCLKSource_LSI);
#elif defined (RTC_CLOCK_SOURCE_LSE)RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE);
#elif defined (RTC_CLOCK_SOURCE_HSE)RCC_RTCCLKConfig(RCC_RTCCLKSource_HSE_Div32);            //直接8Mhz/32=250KHz
#endifRCC_RTCCLKCmd(ENABLE);/* Enable the RTC Clock */RTC_WaitForSynchro();/* Wait for RTC APB registers synchronisation */#if defined (RTC_CLOCK_SOURCE_LSI)/* Calendar Configuration *//*RTC_LSI 为40kHz   RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x01;        // 1->40KHzRTC_InitStructure.RTC_SynchPrediv    =  0x4E1F;    // 19999->40KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#elif defined (RTC_CLOCK_SOURCE_LSE)/* Calendar Configuration *//*RTC_LSE 为32.768kHz   RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x7F;        //127->32.768KHzRTC_InitStructure.RTC_SynchPrediv    =  0xFF;        // 255->32.768KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#elif defined (RTC_CLOCK_SOURCE_HSE)/* Calendar Configuration *//*RTC_LSE 为250.000kHz   RTC_LSI = SynchPrediv * AsynchPrediv*/RTC_InitStructure.RTC_AsynchPrediv = 0x09;        //99->250KHzRTC_InitStructure.RTC_SynchPrediv    =  0xC35;    // 2499->250KHzRTC_InitStructure.RTC_HourFormat = RTC_HourFormat_24;RTC_Init(&RTC_InitStructure);
#endif//RTC_Alarm_Config();
}

【二】设置RTC时间函数,涉及到年、月、日、时、分、秒

/****************************************************************************/
/*Function Name        : RTC Set DateTime                                                  */
/*Author                 : Paul                                                              */
/*Data                : 2021-1-20 09:56:40                                                  */
/*Timer                : none                                                              */
/*Input Parameters    : none.                                                              */
/*Return type            : none                                                              */
/*Output Parameters    : none                                                                */
/****************************************************************************/
void RTC_Set_DateTime(uint8_t year,uint8_t month, uint8_t weekday,uint8_t date,uint8_t hours ,uint8_t minutes ,uint8_t seconds)
{RTC_TimeTypeDef RTC_TimeStructure;RTC_DateTypeDef RTC_DateStructure;/* Set the time to 00h 00mn 00s AM */RTC_TimeStructure.RTC_H12     = RTC_H12_PM;RTC_TimeStructure.RTC_Hours   = hours;RTC_TimeStructure.RTC_Minutes = minutes;RTC_TimeStructure.RTC_Seconds = seconds;  RTC_SetTime(RTC_Format_BIN, &RTC_TimeStructure);RTC_DateStructure.RTC_WeekDay=weekday;RTC_DateStructure.RTC_Month=month;RTC_DateStructure.RTC_Date=date;RTC_DateStructure.RTC_Year=year;RTC_SetDate(RTC_Format_BIN,&RTC_DateStructure);RTC_WriteBackupRegister(RTC_BKP_DR0, 0xA5A5);
}

【三】闹钟配置函数

/****************************************************************************/
/*Function Name     : RTC Alarm Config                                                    */
/*Author                : Paul                                                            */
/*Data              : 2021-1-21 11:48:43                                                  */
/*Timer             : none                                                            */
/*Input Parameters  : none.                                                           */
/*Return type           : none                                                            */
/*Output Parameters : none                                                            */
/****************************************************************************/
void RTC_Alarm_Config(void)
{NVIC_InitTypeDef NVIC_InitStructure; EXTI_InitTypeDef EXTI_InitStructure;RTC_TimeTypeDef   RTC_TimeStructure;RTC_AlarmTypeDef RTC_AlarmStructure;/* EXTI configuration *******************************************************/EXTI_ClearITPendingBit(EXTI_Line17);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);/* Enable the RTC Wakeup Interrupt */NVIC_InitStructure.NVIC_IRQChannel = RTC_IRQn;NVIC_InitStructure.NVIC_IRQChannelPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);RTC_ITConfig( RTC_IT_ALRA, DISABLE );  RTC_AlarmCmd(RTC_Alarm_A,DISABLE);/*  RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_All;RTC_SetAlarm(RTC_Format_BCD, RTC_Alarm_A, &RTC_AlarmStructure); RTC_AlarmSubSecondConfig(RTC_Alarm_A, 0xFF, RTC_AlarmSubSecondMask_SS14_8);*/RTC_GetTime(RTC_Format_BIN, &RTC_TimeStructure);RTC_AlarmStructure.RTC_AlarmTime.RTC_H12=RTC_H12_AM;RTC_AlarmStructure.RTC_AlarmTime.RTC_Hours=RTC_TimeStructure.RTC_Hours;RTC_AlarmStructure.RTC_AlarmTime.RTC_Minutes=RTC_TimeStructure.RTC_Minutes;RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds=RTC_TimeStructure.RTC_Seconds+5;if(RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds >=60)RTC_AlarmStructure.RTC_AlarmTime.RTC_Seconds-=60;RTC_AlarmStructure.RTC_AlarmDateWeekDay = 0x31;RTC_AlarmStructure.RTC_AlarmDateWeekDaySel = RTC_AlarmDateWeekDaySel_Date;RTC_AlarmStructure.RTC_AlarmMask = RTC_AlarmMask_DateWeekDay | RTC_AlarmMask_Hours|RTC_AlarmMask_Minutes;  RTC_SetAlarm(RTC_Format_BIN, RTC_Alarm_A, &RTC_AlarmStructure);RTC_ClearITPendingBit(RTC_IT_ALRA); RTC_ITConfig(RTC_IT_ALRA, ENABLE);RTC_AlarmCmd(RTC_Alarm_A, ENABLE);/* Enable the alarm */
}

【四】RTC中断函数

/****************************************************************************/
/*Function Name     : RTC IRQHandler                                                      */
/*Author                : Paul                                                            */
/*Data              : 2021-1-20 10:35:27                                                  */
/*Timer             : none                                                            */
/*Input Parameters  : none.                                                           */
/*Return type           : none                                                            */
/*Output Parameters : none                                                            */
/****************************************************************************/
void RTC_IRQHandler(void)
{if(RTC_GetFlagStatus(RTC_IT_TS)!=RESET){RTC_ClearITPendingBit(RTC_IT_TS);}if(RTC_GetITStatus(RTC_IT_ALRA) != RESET){RTC_ClearITPendingBit(RTC_IT_ALRA);RTC_AlarmTime_Add_5_Sencond();WDR_Count_Rst();}EXTI_ClearITPendingBit(EXTI_Line17);
}

STM32F030 RTC内部晶振/外部晶振/闹钟相关推荐

  1. STM32 USB虚拟串口调试总结(内部晶振、外部晶振配置、硬件电路说明、测试方法)

    目录 1.参考链接: 2.虚拟串口硬件说明 2.1.程序中无需配置硬件的设计:D+直接接了3.3V的上拉电阻. 2.2.需要程序中配置D+上拉电阻使能的设计:可以软件模拟USB插拔,便于固件更新后自动 ...

  2. 关于STM32 RTC时钟使用内部/外部晶振的切换方法

    对于使用STM32单片开发项目的同志,经常会使用到STM32的RTC功能,而在配置RTC的功能时需要配置晶振的使用,可以使用内部晶振或外部晶振,配置流程参考官方的示例代码即可. 但在之前的项目中遇到一 ...

  3. stm32启用内部晶振(stm32设置外部晶振)

    STM32中的晶振电路有什么作用 stm32  有两个可接入的外部晶振,自己内部也有低俗的晶振.举个例子,手册也有说明低速主要给RTC使用了,高速是给一些外设及内核提供时钟元,内部的主要是给看门狗用或 ...

  4. 怎样辨别内部晶振与外部晶振

    一.单片机晶振简单介绍 单片机晶振是单片机内部电路产生单片机所需的时钟频率的部件,单片机晶振提供的时钟频率越高,那么单片机运行速度就越快,单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率.晶振 ...

  5. stm32F103采用内部晶振8MHz时钟和外部晶振初始化代码

    使用HSE配置系统时钟(stm32F10x 系列 外部晶振一般为4M–25MHz,具体见芯片手册) 首先需要复位RCC寄存器! 使能HSE 判断HSE是否启动成功 使能预取指 设置FLASH等待周期 ...

  6. (转载)STM32 外部晶振电路设计和匹配

    (转载来自:https://blog.csdn.net/Seaman_TY/article/details/93090532) STM32的时钟源 STM32F103有两种主时钟方案,一个是依靠内部R ...

  7. stm32不使用外部晶振管脚怎么处理_外部晶体振荡器被旁路的原理和原因

    单片机的外部晶振稳定,受温度,湿度等环境因素影响比内部振荡器小,精度比较高.而且当设计需要降低功耗时,比如说便携式仪表等,就需要外设晶振,因为内部振荡器不能根据需要停止,而外部晶振可以适时停止,从而进 ...

  8. stm32不使用外部晶振管脚怎么处理_stm32103如果不用32k晶振,那引脚是悬空还是接地?...

    如果使用内部RC振荡器而不使用外部晶振,请按照下面方法处理: 1)对于100脚或144脚的产品,OSC_IN应接地,OSC_OUT应悬空. 2)对于少于100脚的产品,有2种接法: 2.1)OSC_I ...

  9. 让Atmega8A-PU 支持外部晶振的熔丝设置

    这段时间搞了个arduino玩,感觉买的板子不过瘾,照着网上的教程折腾Arduino最小系统,过程非常曲折,现将部分内容总结记录下来,以备日后查阅. 参考文章:Arduino 1.0--让最小系统更简 ...

最新文章

  1. scapy windows install
  2. 《Oracle高性能自动化运维》一一2.5 小结
  3. fatal error C1083: 无法打开预编译头文件:“Debug\opencv.pch”: No such file or directory
  4. 【网络安全】身份验证凭证为何如此重要?
  5. First Missing Positive
  6. c++多态--2(计算器,纯虚函数和抽象类)
  7. 简单java在线测评程序
  8. 技术能变现,才是硬道理
  9. 已有项目要不要迁移到Addressable系统?
  10. spyder替换_Spyder 快捷键大全
  11. HGOI 20190816 省常中互测8
  12. c语言获取ip地址,如何用C语言获得本机IP地址
  13. 接了几个APP逆向的私活,赚爆了!
  14. 松下服务器没显示,松下Panasonic伺服驱动器没有显示维修
  15. Python每日一记20哑变量
  16. AT89C51中断模板(宏定义)
  17. google浏览器缓存文件在哪里
  18. BZOJ5394: [Ynoi2016]炸脖龙(欧拉广义降幂)
  19. 理解置信区间和置信水平
  20. android桌面壁纸显示不全屏显示,手机壁纸怎么全屏 全屏显示手机壁纸方法

热门文章

  1. 【公益创投】“爱无限·心关爱”2021心理情景剧剧本征集活动结果出炉啦!
  2. 安装完linux后要做的几件事。
  3. 解决Cannot create PoolableConnectionFactory (Access denied for user 'xxx'@'xxx.xxx.xx.xxx' (using pas
  4. 怎样知道自己的电脑是否支持GPU?
  5. 史上最细Maven一条龙服务(从0到飞起)
  6. 2000~2009十大创业新模式
  7. 2019年阿里云的最新优惠活动
  8. leetcode进行手机解绑与换绑
  9. 千年之恋HTML5和CSS3
  10. 孩子的同学写的:《恋秋 忆秋 叹秋》